diff --git a/STATUS.md b/STATUS.md index 46d8335e..def4dce9 100644 --- a/STATUS.md +++ b/STATUS.md @@ -24,7 +24,7 @@ - DooPlex: something sets the shared checkout to „bare" (R-935). ## What we work on -- Dated checks, run by CC. 2026-10-26: tonight's database copy reaches the restic sweep (R-232); each hub daily job ran once on the clock-change day (R-1183). 2026-10-27: the weekly clean-up window (R-435; the logs of the last one were lost to restarts). 2026-10-30: D35, website and installer to Cloudflare, starts (R-1228, ruled yes). +- Dated checks, run by CC. 2026-10-26: each hub daily job ran once on the clock-change day (R-1183). 2026-10-27: the weekly clean-up window (R-435; the logs of the last one were lost to restarts). 2026-10-30: D35, website and installer to Cloudflare, starts (R-1228, ruled yes). ## Waiting on you — decide @@ -50,13 +50,13 @@ Newest first. CC's pick is in the „Pick" column. Each row also has its full te 6. BIOS: on the N100, read „After Power Loss"; on the HP, set „Bypass F1 Prompt on Configuration Changes" to Enable. Since 2026-10-14. 7. Pin the first Facebook post (R-917), and look at the new cover in the Facebook phone app (R-919). Since 2026-10-12. -**Monday 2026-10-26, release list (attended).** 1. Controller v0.343.0: the restore and backup fixes (R-1251–R-1253, R-1269–R-1271), R-1250. If not: the P1 stays open. 2. Agent v0.165.0 + your vouch: BYO keeps its SSH (R-1257). 3. Hub v0.170.0: the recovery package in one step (R-1254). 4. Catalog: n8n usage data off; OpenGist 256 MB. **Day, 2026-10-23 — your do list.** 1. Print the break-glass sheet (`documentation/runbooks/break-glass-sheet.md`, the part from „The sheet”, one A4), fill it by hand, keep it outside the home (D32; R-923, R-924). If not: after a DooPlex loss no off-site copy opens. -2. On the hub's Hosts page: Discard appliance 49, and delete host Tester4-aa9466. If not: two dead entries alarm. +2. On the hub's Hosts page: Discard appliance 49 (host Tester4-aa9466 is gone). If not: a dead entry alarms. 3. Give the homelab session R-1241, R-1242, the lists at the end of `documentation/audits/plex2shell-felhom-impact-2026-10-23/README.md` and `documentation/audits/dooplex-alarms-2026-10-24/README.md`, and an upload alarm on DooPlex's `eno1` (~100 Mbit/s line; the flood peaked at 905). If not: the next hacked app on DooPlex can read the hub's backups. **The rest** - System poster needs a refresh: the new 01:40 „release copy” arrow from DooPlex to ep0 (D33); the hub-database label already says every 6 hours. If not: the drawing misses one copy. +- Publish installer 1.36.1 (tag + webpage sync): a wrong passphrase then reads „passphrase REJECTED", not a doubled code (R-1284). - Rotate the reused homelab logins and decide the Gitea repo's visibility (R-925, P1). Since 2026-10-09. - Two DooPlex leftovers: `leftovers/2026-10-14/first-post/` (keep or delete); the `deny`-list edit in homelab-manifests' `.claude/settings.json` (commit or drop). Since 2026-10-14. - Before the first paying customer: Tandoor's permission (R-789); a lawyer for the licence list and the terms (R-802, R-813); SparkyFitness by e-mail (R-784). diff --git a/documentation/audits/release-2026-10-26/boxes-0.343.0/demo-felhom-controller.log b/documentation/audits/release-2026-10-26/boxes-0.343.0/demo-felhom-controller.log new file mode 100644 index 00000000..1f5ce723 --- /dev/null +++ b/documentation/audits/release-2026-10-26/boxes-0.343.0/demo-felhom-controller.log @@ -0,0 +1,161 @@ +2026/10/25 17:16:37 [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible +2026/10/25 17:16:37 [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true) +2026/10/25 17:16:37 [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false) +2026/10/25 17:16:37 [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false) +2026/10/25 17:16:37 [INFO] felhom-controller 0.343.0 starting (customer: demo-felhom, domain: demo-felhom.eu) +2026/10/25 17:16:37 [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json +2026/10/25 17:16:37 [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key +2026/10/25 17:16:37 [INFO] [stacks] Using compose command: docker compose +2026/10/25 17:16:37 [INFO] [stacks] ScanStacks complete: 68 stacks found (5 deployed, 63 available) +2026/10/25 17:16:37 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:16:37 [INFO] [stacks] InjectMissingFields: processed 5 stacks +2026/10/25 17:16:37 [INFO] [stacks] Encryption migration: no stacks needed migration +2026/10/25 17:16:37 [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s) +2026/10/25 17:16:37 [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 0 left unrecorded (state ambiguous — legacy boot behaviour retained) +2026/10/25 17:16:37 [INFO] [stacks] installed-images backfill: 0 app(s) recorded, 5 already had a record, 0 left unrecorded (could not be observed completely — unknown, which renders nothing) +2026/10/25 17:16:37 [INFO] [stacks] pin adoption: 0 pinned, 5 already pinned, 0 left unpinned (0 not completely observed, 0 running something the template no longer offers) +2026/10/25 17:16:37 [INFO] [stacks] applied-meta backfill (R-646): recorded 0 []; skipped 0 [] — not current with the catalog, their pinned version's .felhom.yml is no longer on the box +2026/10/25 17:16:37 [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s) +2026/10/25 17:16:37 [INFO] [sync] Starting catalog sync +2026/10/25 17:16:37 [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db +2026/10/25 17:16:37 [INFO] Metrics collector started (60s interval) +2026/10/25 17:16:37 [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main) +2026/10/25 17:16:37 [INFO] [tier2] start-up: no leftover second-drive copy container +2026/10/25 17:16:37 [INFO] [backup] restore record wired: /opt/docker/felhom-controller/data/restore-status.json (interrupted at startup: false) +2026/10/25 17:16:37 [INFO] [backup] app-data run record wired: /opt/docker/felhom-controller/data/appdata-run.json (an earlier cut still shown: false) +2026/10/25 17:16:37 [INFO] Notifier enabled (hub: https://hub.felhom.eu) +2026/10/25 17:16:37 [INFO] [upwatch] the host's weekly line test: 92.6 Mbit/s (measured 2026-10-24T08:02:45Z) +2026/10/25 17:16:37 [INFO] [upwatch] upload and CPU watch started (line 93 Mbit/s, qBittorrent share 50 %) +2026/10/25 17:16:37 [INFO] [selfupdate] Post-update startup: update successful (0.342.0 → 0.343.0) +2026/10/25 17:16:37 [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: status-refresh (every 10s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: docker-socket-watch (every 15s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: docker-socket-users (every 5m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: health-probes (every 10s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: system-health (every 5m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: after-unclean-boot (every 30s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: ring-spill (every 30s) +2026/10/25 17:16:37 [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply +2026/10/25 17:16:37 [INFO] [scheduler] Daily job db-dump scheduled for 2026-10-26 02:30 CET +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: conversion-copy-release (every 1h0m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-10-26 03:30 CET +2026/10/25 17:16:37 [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-10-26 04:15 CET +2026/10/25 17:16:37 [INFO] [catch-up] controller start: no backup leg missed its last scheduled time — nothing to make up +2026/10/25 17:16:37 [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-10-26 05:10 CET +2026/10/25 17:16:37 [INFO] [scheduler] Daily job offsite-integrity scheduled for 2026-10-26 06:00 CET +2026/10/25 17:16:37 [INFO] [scheduler] Daily job offsite-proof scheduled for 2026-10-26 05:30 CET +2026/10/25 17:16:37 [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-10-26 04:00 CET +2026/10/25 17:16:37 [INFO] [scheduler] Daily job fill-watch scheduled for 2026-10-26 03:30 CET +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: fill-watch-interval (every 10m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s) +2026/10/25 17:16:37 [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s) +2026/10/25 17:16:37 [INFO] ========== Startup Self-Test ========== +2026/10/25 17:16:37 [INFO] Event pushed: controller_updated (info) [hu-only] — Controller frissítve: 0.342.0 → 0.343.0 +2026/10/25 17:16:37 [INFO] [PASS] Docker socket: reachable (v29.9.2) +2026/10/25 17:16:37 [INFO] [PASS] Stacks directory: /opt/docker/stacks +2026/10/25 17:16:37 [INFO] [PASS] Data directory: /opt/docker/felhom-controller/data (writable) +2026/10/25 17:16:37 [INFO] [PASS] System data path: /mnt/sys_drive +2026/10/25 17:16:37 [INFO] [PASS] Storage paths: 1 connected, 0 disconnected +2026/10/25 17:16:37 [INFO] [PASS] Git catalog: 65 app definitions found +2026/10/25 17:16:37 [INFO] [PASS] Hub connectivity: https://hub.felhom.eu reachable (HTTP 200) +2026/10/25 17:16:37 [INFO] [PASS] Metrics DB: 30.3 MB +2026/10/25 17:16:37 [INFO] ======================================== +2026/10/25 17:16:37 [INFO] Self-test complete: 8 passed, 0 warnings, 0 failed +2026/10/25 17:16:37 [INFO] [scheduler] Starting scheduler with 23 jobs +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: geo-verify (every 6h0m0s) +2026/10/25 17:16:37 [INFO] Geo-restriction support enabled (CF API token configured) +2026/10/25 17:16:37 [INFO] [report] hub wait channel active (hold ≤240s) +2026/10/25 17:16:37 [INFO] Notification preferences synced to hub: source=household status=ok email=doodoo21@freemail.hu, events=[app_stopped_unhealthy app_update_held app_update_undone backup_failed db_dump_failed disk_critical disk_warning expected_backup_missed expected_dbdump_missed health_critical node_down offbox_enlarge_blocked storage_disconnected], cooldown=6h, email_cleared=false +2026/10/25 17:16:37 [INFO] [backup] Found 0 DB dump files across drives +2026/10/25 17:16:37 [INFO] [infra] connected felhom-controller to traefik-public +2026/10/25 17:16:37 [INFO] [backup] Discovered 0 databases +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/prowlarr/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/radarr/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/sonarr/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/qbittorrent/docker-compose.yml +2026/10/25 17:16:37 [INFO] [backup] Discovered app data: 5 apps +2026/10/25 17:16:37 [INFO] [web] sessions: restored 1 dashboard session(s) from disk (dropped 0 expired, 0 malformed) +2026/10/25 17:16:37 [INFO] [web] Auth: using password from settings.json +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: disk-health-check (every 1h0m0s) +2026/10/25 17:16:37 [INFO] [scheduler] Registered periodic job: agent-channel-health (every 1m0s) +2026/10/25 17:16:37 [INFO] Web UI listening on :8080 +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/radarr/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/sonarr/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/qbittorrent/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/grimmory/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/immich/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/nextcloud/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:37 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/opengist — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:37 [INFO] [stacks] SaveAppConfig: saved config for opengist +2026/10/25 17:16:37 [INFO] [stacks] opengist: install id 75d74fb92a0d5fcd recorded (an app installed before D47) +2026/10/25 17:16:37 [INFO] [backup] Recovery unit captured for opengist → /mnt/sys_drive/felhom-data/backups/primary/opengist (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:37 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/prowlarr — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:37 [INFO] [stacks] SaveAppConfig: saved config for prowlarr +2026/10/25 17:16:37 [INFO] [stacks] prowlarr: install id 4a473060b914b0e2 recorded (an app installed before D47) +2026/10/25 17:16:37 [INFO] [backup] Recovery unit captured for prowlarr → /mnt/sys_drive/felhom-data/backups/primary/prowlarr (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:37 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/radarr — 3 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:37 [INFO] [stacks] SaveAppConfig: saved config for radarr +2026/10/25 17:16:37 [INFO] [stacks] radarr: install id 55bfad619c700564 recorded (an app installed before D47) +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/grimmory/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/immich/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/nextcloud/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/grimmory/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/immich/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/nextcloud/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/grimmory/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/immich/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/nextcloud/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:37 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:37 [INFO] [backup] Recovery unit captured for radarr → /mnt/felhom-drives/hdd_1/backups/primary/radarr (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:37 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/sonarr — 3 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:37 [INFO] [stacks] SaveAppConfig: saved config for sonarr +2026/10/25 17:16:37 [INFO] [stacks] sonarr: install id c0df4f095aa926d7 recorded (an app installed before D47) +2026/10/25 17:16:37 [INFO] [backup] Recovery unit captured for sonarr → /mnt/felhom-drives/hdd_1/backups/primary/sonarr (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:37 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/qbittorrent — 4 env vars, 0 encrypted, 1 sensitive fields +2026/10/25 17:16:37 [INFO] [stacks] SaveAppConfig: saved config for qbittorrent +2026/10/25 17:16:37 [INFO] [stacks] qbittorrent: install id f82c26e291976a7f recorded (an app installed before D47) +2026/10/25 17:16:37 [INFO] [sync] Catalog sync complete +2026/10/25 17:16:37 [INFO] [sync] Initial sync: Sablonok naprakészek — nincs változás +2026/10/25 17:16:37 [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126) +2026/10/25 17:16:37 [INFO] [backup] Recovery unit captured for qbittorrent → /mnt/felhom-drives/hdd_1/backups/primary/qbittorrent (images=1, secrets-referenced=1, data_keys=0, portable-carried=0/0, withheld=1) +2026/10/25 17:16:37 [INFO] [backup] Backup status cache refreshed +2026/10/25 17:16:37 [INFO] [web] FileBrowser sync — no config/compose change, ensured running without recreate (1 storage path(s)) +2026/10/25 17:16:37 [INFO] [monitor] Health check: status=ok +2026/10/25 17:16:42 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:16:42 [INFO] [report] Building system report +2026/10/25 17:16:42 [INFO] Event pushed: controller_started (info) [hu-only] — Controller elindult (0.343.0) +2026/10/25 17:16:43 [INFO] [monitor] Health check: status=ok +2026/10/25 17:16:43 [INFO] [report] Hub report pushed successfully (5496 bytes) +2026/10/25 17:16:43 [INFO] [settings] Settings saved +2026/10/25 17:16:43 [INFO] Startup hub report sent +2026/10/25 17:16:47 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:16:47 [INFO] [offsite-apply] settle-gate: GO — at/above floor 0.343.0 (we are 0.343.0), no managed update running +2026/10/25 17:16:47 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:16:47 [INFO] Health probes: 5 ok (of 5 probed) +2026/10/25 17:16:52 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:16:52 [INFO] [bootrecon] boot window: fleet settled after 10s (3 identical samples 5s apart) — sweeping +2026/10/25 17:16:52 [INFO] [bootrecon] Boot reconciliation: no boot-orphaned apps (nothing to start) +2026/10/25 17:16:57 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:17:07 [INFO] [deadapp] boot grace 1m30s: the host's last boot was clean (R-856) +2026/10/25 17:17:07 [INFO] [aftercrash] a normal (or unknown) boot — no app repair after an unclean boot (R-1007) +2026/10/25 17:17:07 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:17:08 [INFO] [selfupdate] Current version 0.343.0 is up to date +2026/10/25 17:17:17 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:17:27 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:17:37 [INFO] [stacks] Status refresh: 8 containers across 68 stacks +2026/10/25 17:17:37 [INFO] [scheduler] Running job: agent-channel-health +2026/10/25 17:17:38 [INFO] [scheduler] Job agent-channel-health completed (took 859ms) +2026/10/25 17:17:47 [INFO] [stacks] Status refresh: 8 containers across 68 stacks diff --git a/documentation/audits/release-2026-10-26/boxes-0.343.0/demo-hp-controller.log b/documentation/audits/release-2026-10-26/boxes-0.343.0/demo-hp-controller.log new file mode 100644 index 00000000..55ad995e --- /dev/null +++ b/documentation/audits/release-2026-10-26/boxes-0.343.0/demo-hp-controller.log @@ -0,0 +1,731 @@ +2026/10/25 17:16:53 main.go:3990: [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible +2026/10/25 17:16:53 main.go:3993: [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false) +2026/10/25 17:16:53 main.go:3993: [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true) +2026/10/25 17:16:53 main.go:3993: [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false) +2026/10/25 17:16:53 main.go:355: [INFO] felhom-controller 0.343.0 starting (customer: demo-hp, domain: enkisfelhom.hu) +2026/10/25 17:16:53 settings.go:813: [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json +2026/10/25 17:16:53 settings.go:1861: [DEBUG] [settings] AutoDiscoverStoragePaths discovered=[/mnt/felhom-drives/hdd_1] existing=1 +2026/10/25 17:16:53 main.go:381: [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key +2026/10/25 17:16:53 manager.go:396: [INFO] [stacks] Using compose command: docker compose +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=true composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=true composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "dawarich" deployed=false composePath=/opt/docker/stacks/dawarich/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "grimmory" deployed=false composePath=/opt/docker/stacks/grimmory/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "grocy" deployed=false composePath=/opt/docker/stacks/grocy/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=true composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "karakeep" deployed=false composePath=/opt/docker/stacks/karakeep/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "lubelogger" deployed=false composePath=/opt/docker/stacks/lubelogger/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "metube" deployed=false composePath=/opt/docker/stacks/metube/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "nzbget" deployed=false composePath=/opt/docker/stacks/nzbget/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=true composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "prowlarr" deployed=false composePath=/opt/docker/stacks/prowlarr/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "qbittorrent" deployed=false composePath=/opt/docker/stacks/qbittorrent/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "radicale" deployed=false composePath=/opt/docker/stacks/radicale/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "sabnzbd" deployed=false composePath=/opt/docker/stacks/sabnzbd/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "samba" deployed=false composePath=/opt/docker/stacks/samba/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "transmission" deployed=false composePath=/opt/docker/stacks/transmission/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/10/25 17:16:53 manager.go:676: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/10/25 17:16:53 manager.go:1960: [DEBUG] [stacks] getCatalogTemplateSlugs: found 65 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/10/25 17:16:53 manager.go:757: [DEBUG] [stacks] ScanStacks: catalog has 65 template slugs for orphan detection +2026/10/25 17:16:53 manager.go:788: [INFO] [stacks] ScanStacks complete: 69 stacks found (12 deployed, 57 available) +2026/10/25 17:16:54 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:16:54 deploy.go:1389: [DEBUG] [stacks] InjectMissingFields: checking 12 stacks +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack privatebin — 2 deploy fields, 2 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack calibre-web — 5 deploy fields, 4 existing env vars +2026/10/25 17:16:54 deploy.go:1470: [WARN] [stacks] Stack calibre-web: new field ADMIN_PASSWORD (type=password) requires manual configuration +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack home-assistant — 2 deploy fields, 2 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack bentopdf — 2 deploy fields, 2 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack plex — 4 deploy fields, 3 existing env vars +2026/10/25 17:16:54 deploy.go:1470: [WARN] [stacks] Stack plex: new field PLEX_CLAIM (type=text) requires manual configuration +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack romm — 6 deploy fields, 6 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack bookstack — 5 deploy fields, 4 existing env vars +2026/10/25 17:16:54 deploy.go:1470: [WARN] [stacks] Stack bookstack: new field ADMIN_PASSWORD (type=password) requires manual configuration +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack paperless-ngx — 8 deploy fields, 8 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack opengist — 2 deploy fields, 2 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack docmost — 4 deploy fields, 4 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack adventurelog — 4 deploy fields, 5 existing env vars +2026/10/25 17:16:54 deploy.go:1411: [DEBUG] [stacks] InjectMissingFields: checking stack kimai — 5 deploy fields, 5 existing env vars +2026/10/25 17:16:54 deploy.go:1482: [INFO] [stacks] InjectMissingFields: processed 12 stacks +2026/10/25 17:16:54 manager.go:535: [DEBUG] [stacks] MigrateEncryption: checking 12 deployed stacks for plaintext sensitive values +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "adventurelog" (2 sensitive fields) +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "kimai" (2 sensitive fields) +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "calibre-web" (2 sensitive fields) +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "romm" (3 sensitive fields) +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "bookstack" (3 sensitive fields) +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "paperless-ngx" (3 sensitive fields) +2026/10/25 17:16:54 manager.go:555: [DEBUG] [stacks] MigrateEncryption: checking stack "docmost" (2 sensitive fields) +2026/10/25 17:16:54 manager.go:579: [INFO] [stacks] Encryption migration: no stacks needed migration +2026/10/25 17:16:54 quiesce.go:192: [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s) +2026/10/25 17:16:54 desiredstate.go:137: [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 0 left unrecorded (state ambiguous — legacy boot behaviour retained) +2026/10/25 17:16:54 installed.go:537: [INFO] [stacks] installed-images backfill: 0 app(s) recorded, 12 already had a record, 0 left unrecorded (could not be observed completely — unknown, which renders nothing) +2026/10/25 17:16:54 pin.go:290: [INFO] [stacks] pin adoption: 0 pinned, 12 already pinned, 0 left unpinned (0 not completely observed, 0 running something the template no longer offers) +2026/10/25 17:16:54 undo.go:676: [INFO] [stacks] applied-meta backfill (R-646): recorded 0 []; skipped 0 [] — not current with the catalog, their pinned version's .felhom.yml is no longer on the box +2026/10/25 17:16:54 sync.go:137: [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s) +2026/10/25 17:16:54 sync.go:228: [INFO] [sync] Starting catalog sync +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] CPUCollector.Start: sampleRate=5s +2026/10/25 17:16:54 main.go:570: [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db +2026/10/25 17:16:54 main.go:579: [INFO] Metrics collector started (60s interval) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/10/25 17:16:54 sync.go:358: [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main) +2026/10/25 17:16:54 sync.go:360: [DEBUG] [sync] git fetch --depth 1 origin main in /opt/docker/felhom-controller/data/catalog-cache +2026/10/25 17:16:54 sync.go:787: [DEBUG] [sync] Running: git fetch --depth 1 origin main +2026/10/25 17:16:54 [INFO] [tier2] start-up: no leftover second-drive copy container +2026/10/25 17:16:54 restore_record_wiring.go:37: [INFO] [backup] restore record wired: /opt/docker/felhom-controller/data/restore-status.json (interrupted at startup: false) +2026/10/25 17:16:54 run_record_wiring.go:29: [INFO] [backup] app-data run record wired: /opt/docker/felhom-controller/data/appdata-run.json (an earlier cut still shown: false) +2026/10/25 17:16:54 notifier.go:81: [INFO] Notifier enabled (hub: https://hub.felhom.eu) +2026/10/25 17:16:54 service.go:79: [INFO] [upwatch] the host's weekly line test: 94.4 Mbit/s (measured 2026-10-24T08:00:33Z) +2026/10/25 17:16:54 upwatch_wiring.go:149: [INFO] [upwatch] upload and CPU watch started (line 94 Mbit/s, qBittorrent share 50 %) +2026/10/25 17:16:54 updater.go:104: [DEBUG] [selfupdate] VerifyStartup: checking update state in /opt/docker/felhom-controller/data +2026/10/25 17:16:54 updater.go:104: [DEBUG] [selfupdate] VerifyStartup: pending update found — target=0.343.0 previous=0.342.0 +2026/10/25 17:16:54 updater.go:855: [INFO] [selfupdate] Post-update startup: update successful (0.342.0 → 0.343.0) +2026/10/25 17:16:54 main.go:864: [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30) +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: status-refresh (every 10s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="status-refresh" interval=10s totalJobs=1 +2026/10/25 17:16:54 notifier.go:317: [DEBUG] PushEvent: type=controller_updated severity=info url=https://hub.felhom.eu/api/v1/event +2026/10/25 17:16:54 offsiteapply.go:148: [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="stack-scan" interval=2m0s totalJobs=2 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: docker-socket-watch (every 15s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="docker-socket-watch" interval=15s totalJobs=3 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: docker-socket-users (every 5m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="docker-socket-users" interval=5m0s totalJobs=4 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: health-probes (every 10s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="health-probes" interval=10s totalJobs=5 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: system-health (every 5m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="system-health" interval=5m0s totalJobs=6 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: after-unclean-boot (every 30s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="after-unclean-boot" interval=30s totalJobs=7 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="deadapp-check" interval=30s totalJobs=8 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: ring-spill (every 30s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="ring-spill" interval=30s totalJobs=9 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job db-dump scheduled for 2026-10-26 02:30 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="db-dump" schedule="02:30" nextRun=2026-10-26T02:30:00+01:00 totalJobs=10 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="offsite-credential-retry" interval=5m0s totalJobs=11 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="backup-cache" interval=5m0s totalJobs=12 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: conversion-copy-release (every 1h0m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="conversion-copy-release" interval=1h0m0s totalJobs=13 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-10-26 03:30 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="tier2-backup" schedule="03:30" nextRun=2026-10-26T03:30:00+01:00 totalJobs=14 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-10-26 04:15 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="offbox-backup" schedule="04:15" nextRun=2026-10-26T04:15:00+01:00 totalJobs=15 +2026/10/25 17:16:54 nightchain.go:284: [INFO] [catch-up] controller start: no backup leg missed its last scheduled time — nothing to make up +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-10-26 05:10 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="offsite-abandon-sweep" schedule="05:10" nextRun=2026-10-26T05:10:00+01:00 totalJobs=16 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job offsite-integrity scheduled for 2026-10-26 06:00 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="offsite-integrity" schedule="06:00" nextRun=2026-10-26T06:00:00+01:00 totalJobs=17 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job offsite-proof scheduled for 2026-10-26 05:30 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="offsite-proof" schedule="05:30" nextRun=2026-10-26T05:30:00+01:00 totalJobs=18 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-10-26 04:00 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="metrics-prune" schedule="04:00" nextRun=2026-10-26T04:00:00+01:00 totalJobs=19 +2026/10/25 17:16:54 scheduler.go:150: [INFO] [scheduler] Daily job fill-watch scheduled for 2026-10-26 03:30 CET +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job registered: name="fill-watch" schedule="03:30" nextRun=2026-10-26T03:30:00+01:00 totalJobs=20 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: fill-watch-interval (every 10m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="fill-watch-interval" interval=10m0s totalJobs=21 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="hub-report" interval=15m0s totalJobs=22 +2026/10/25 17:16:54 main.go:1823: [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu) +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="selfupdate-check" interval=6h0m0s totalJobs=23 +2026/10/25 17:16:54 selftest.go:50: [INFO] ========== Startup Self-Test ========== +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714380KB) → used≈16630MB avail≈9268MB +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714380 availKB=10990616 → total=25898MB avail=9268MB used=16630MB (64.2%) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=20.8GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=225.2GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readLoadAvg: raw="1.71 1.15 1.44 14/1581 105" → 1m=1.71 5m=1.15 15m=1.44 +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 58.6°C (hwmon2) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetInfo done in 116ms — mem=16630MB/25898MB (64.2%), rootDisk=20.8GB/68.7GB (31.8%), load=1.71/1.15/1.44, temp=58.6°C (hwmon2), cpu=0.0% +2026/10/25 17:16:54 notifier.go:343: [DEBUG] PushEvent: controller_updated pushed OK (HTTP 200) +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Docker socket: reachable (v29.9.2) +2026/10/25 17:16:54 notifier.go:355: [INFO] Event pushed: controller_updated (info) [hu-only] — Controller frissítve: 0.342.0 → 0.343.0 +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Stacks directory: /opt/docker/stacks +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Data directory: /opt/docker/felhom-controller/data (writable) +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] System data path: /mnt/sys_drive +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Storage paths: 1 connected, 0 disconnected +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Git catalog: 65 app definitions found +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Hub connectivity: https://hub.felhom.eu reachable (HTTP 200) +2026/10/25 17:16:54 selftest.go:68: [INFO] [PASS] Metrics DB: 107.4 MB +2026/10/25 17:16:54 selftest.go:70: [INFO] ======================================== +2026/10/25 17:16:54 selftest.go:71: [INFO] Self-test complete: 8 passed, 0 warnings, 0 failed +2026/10/25 17:16:54 scheduler.go:224: [INFO] [scheduler] Starting scheduler with 23 jobs +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] scheduler started: periodic=15 daily=8 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: geo-verify (every 6h0m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="geo-verify" interval=6h0m0s totalJobs=24 +2026/10/25 17:16:54 main.go:2088: [INFO] Geo-restriction support enabled (CF API token configured) +2026/10/25 17:16:54 server.go:318: [DEBUG] [web] NewServer: initializing web server v0.343.0 +2026/10/25 17:16:54 server.go:319: [DEBUG] [web] NewServer: backup=true scheduler=true alertMgr=true notifier=true updater=true +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job offsite-abandon-sweep: next run at 2026-10-26 05:10:00 CET (waiting 10h53m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job db-dump: next run at 2026-10-26 02:30:00 CET (waiting 8h13m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job tier2-backup: next run at 2026-10-26 03:30:00 CET (waiting 9h13m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job offbox-backup: next run at 2026-10-26 04:15:00 CET (waiting 9h58m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job offsite-integrity: next run at 2026-10-26 06:00:00 CET (waiting 11h43m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job offsite-proof: next run at 2026-10-26 05:30:00 CET (waiting 11h13m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job metrics-prune: next run at 2026-10-26 04:00:00 CET (waiting 9h43m6s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] daily job fill-watch: next run at 2026-10-26 03:30:00 CET (waiting 9h13m6s) +2026/10/25 17:16:54 waiter.go:95: [INFO] [report] hub wait channel active (hold ≤240s) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/10/25 17:16:54 backup.go:540: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [adventurelog, bentopdf, bookstack, docmost, home-assistant, kimai, opengist, privatebin] +2026/10/25 17:16:54 backup.go:540: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, plex, romm] +2026/10/25 17:16:54 backup.go:1246: [INFO] [backup] Found 19 DB dump files across drives +2026/10/25 17:16:54 waiter.go:132: [DEBUG] [report] wait baseline generation=1 +2026/10/25 17:16:54 dbdump.go:130: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/10/25 17:16:54 server.go:399: [DEBUG] [web] loadTemplates: lang=hu loaded 99 templates, 2085 markers expanded in 63.1108ms +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714380KB) → used≈16652MB avail≈9246MB +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714380 availKB=10965152 → total=25898MB avail=9246MB used=16652MB (64.3%) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=20.8GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=225.2GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readLoadAvg: raw="1.71 1.15 1.44 15/1599 194" → 1m=1.71 5m=1.15 15m=1.44 +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 59.0°C (hwmon2) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetInfo done in 90ms — mem=16652MB/25898MB (64.3%), rootDisk=20.8GB/68.7GB (31.8%), load=1.71/1.15/1.44, temp=59.0°C (hwmon2), cpu=0.0% +2026/10/25 17:16:54 healthcheck.go:128: [DEBUG] [monitor] Raw values: disk=31.8%, hdd=25.3% (configured=true), mem=64.3% (16652MB/25898MB), cpu=0.0%, temp=59.0°C (hwmon2) +2026/10/25 17:16:54 healthcheck.go:409: [DEBUG] [monitor] SSD disk: OK (32%) +2026/10/25 17:16:54 healthcheck.go:445: [DEBUG] [monitor] Memory: OK (64%) +2026/10/25 17:16:54 healthcheck.go:483: [DEBUG] [monitor] Temperature: OK (59°C) +2026/10/25 17:16:54 infra.go:378: [INFO] [infra] connected felhom-controller to traefik-public +2026/10/25 17:16:54 server.go:399: [DEBUG] [web] loadTemplates: lang=en loaded 99 templates, 2085 markers expanded in 50.250005ms +2026/10/25 17:16:54 session_store.go:113: [INFO] [web] sessions: restored 38 dashboard session(s) from disk (dropped 0 expired, 0 malformed) +2026/10/25 17:16:54 server.go:339: [INFO] [web] Auth: using password from settings.json +2026/10/25 17:16:54 sync.go:787: [DEBUG] [sync] Running: git reset --hard origin/main +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: disk-health-check (every 1h0m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="disk-health-check" interval=1h0m0s totalJobs=25 +2026/10/25 17:16:54 scheduler.go:120: [INFO] [scheduler] Registered periodic job: agent-channel-health (every 1m0s) +2026/10/25 17:16:54 scheduler.go:85: [DEBUG] [scheduler] periodic job registered: name="agent-channel-health" interval=1m0s totalJobs=26 +2026/10/25 17:16:54 dbdump.go:149: [DEBUG] DiscoverDatabases: docker ps output: 496564edc900 felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.343.0 +ef0e57fa0965 romm romm rommapp/romm:5.3.1 +01aca2e96906 romm-redis romm redis:7-alpine +d3c8ecc410f7 romm-db romm mariadb:11.8 +0a833b20453d privatebin privatebin privatebin/pdo:2.0.6 +ffbe0c7120c6 plex plex plexinc/pms-docker:1.43.5.11029-6bf8af3f0 +a3375a5404e3 paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-ngx:2.20.15 +9619a5283d77 paperless-postgres paperless-ngx postgres:18-alpine +b4082466c0fe pape... +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.343.0, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.3.1, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/10/25 17:16:54 dbdump.go:178: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=d3c8ecc410f7) +2026/10/25 17:16:54 server.go:983: [DEBUG] [web] CatchAllMiddleware: controller host=felhom.enkisfelhom.hu +2026/10/25 17:16:54 main.go:2364: [INFO] Web UI listening on :8080 +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] actualbudget/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] actualbudget/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/plex/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] adventurelog/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] adventurelog/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] audiobookshelf/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] audiobookshelf/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] bentopdf/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] bentopdf/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] bookstack/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] bookstack/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] calcom/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] calcom/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] calibre-web/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] calibre-web/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 manager.go:258: [DEBUG] [integrations] ReapplyConfigForTarget: target=filebrowser integrations=0 +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] claper/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] claper/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] code-server/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] code-server/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] crafty-controller/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] crafty-controller/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] dawarich/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] dawarich/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 dbdump.go:198: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container privatebin (image=privatebin/pdo:2.0.6, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container plex (image=plexinc/pms-docker:1.43.5.11029-6bf8af3f0, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/10/25 17:16:54 dbdump.go:178: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=9619a5283d77) +2026/10/25 17:16:54 dbdump.go:915: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] docmost/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] docmost/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] emby/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] emby/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] ghost/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] ghost/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] gitea/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] gitea/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] glance/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] glance/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] gokapi/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] gokapi/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] grafana/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] grafana/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] gramps-web/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] gramps-web/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] grimmory/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] grimmory/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] grocy/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] grocy/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] home-assistant/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] home-assistant/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] homebox/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] homebox/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] homepage/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 dbdump.go:198: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.15, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container home-assistant (image=ghcr.io/home-assistant/home-assistant:2026.9.4, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.96.0, not a database) +2026/10/25 17:16:54 dbdump.go:178: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=dd941d6240e4) +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] homepage/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] immich/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] immich/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] jellyfin/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] jellyfin/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] karakeep/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] karakeep/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 healthcheck.go:145: [DEBUG] [monitor] Docker daemon: OK +2026/10/25 17:16:54 healthcheck.go:153: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] kimai/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] kimai/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] komga/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] komga/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] lubelogger/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] lubelogger/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] mealie/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] mealie/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] metube/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] metube/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] n8n/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] n8n/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] navidrome/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] navidrome/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] nextcloud/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] nextcloud/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] nzbget/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] nzbget/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 dbdump.go:198: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.8, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.09.1, not a database) +2026/10/25 17:16:54 dbdump.go:178: [DEBUG] DiscoverDatabases: found mariadb container: bookstack-db (id=fbe94713ce78) +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] onlyoffice/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] onlyoffice/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] opengist/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] opengist/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] outline/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] outline/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] paperless-ngx/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] paperless-ngx/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] papra/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] papra/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] plant-it/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] plant-it/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] plex/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] plex/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] privatebin/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] privatebin/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] prowlarr/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] prowlarr/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] qbittorrent/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] qbittorrent/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] radarr/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] radarr/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] radicale/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] radicale/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] rallly/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] rallly/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] recipe-importer/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] recipe-importer/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] romm/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] romm/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] sabnzbd/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] sabnzbd/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] seerr/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] seerr/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] sonarr/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] sonarr/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] sparkyfitness/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] sparkyfitness/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] tandoor/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] tandoor/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] termix/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] termix/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 dbdump.go:198: [DEBUG] DiscoverDatabases: bookstack-db → stack=bookstack, dbUser=root, dbName=bookstack +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container bentopdf (image=ghcr.io/alam00000/bentopdf:v2.8.6, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container adventurelog (image=ghcr.io/seanmorley15/adventurelog-backend:v0.13.0, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container adventurelog-frontend (image=ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0, not a database) +2026/10/25 17:16:54 dbdump.go:178: [DEBUG] DiscoverDatabases: found postgres container: adventurelog-postgres (id=c84ab95505dc) +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] transmission/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] transmission/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] uptime-kuma/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] uptime-kuma/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] vaultwarden/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] vaultwarden/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] vikunja/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] vikunja/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] wanderer/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] wanderer/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] wger/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] wger/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] wishlist/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] wishlist/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] zipline/docker-compose.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:559: [DEBUG] [sync] zipline/.felhom.yml: hash match, skipped +2026/10/25 17:16:54 sync.go:299: [INFO] [sync] Catalog sync complete +2026/10/25 17:16:54 sync.go:142: [INFO] [sync] Initial sync: Sablonok naprakészek — nincs változás +2026/10/25 17:16:54 dbdump.go:198: [DEBUG] DiscoverDatabases: adventurelog-postgres → stack=adventurelog, dbUser=adventurelog, dbName=adventurelog +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.5.6-stable, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.9.3, not a database) +2026/10/25 17:16:54 dbdump.go:171: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.7.13, not a database) +2026/10/25 17:16:54 dbdump.go:205: [DEBUG] DiscoverDatabases: found 5 database(s), skipped 19 non-DB container(s) +2026/10/25 17:16:54 dbdump.go:208: [INFO] [backup] Discovered 5 databases +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/adventurelog/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bentopdf/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/10/25 17:16:54 handlers.go:3942: [INFO] [web] FileBrowser sync — no config/compose change, ensured running without recreate (1 storage path(s)) +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/home-assistant/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/plex/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/10/25 17:16:54 [INFO] [backup] Discovered app data: 12 apps +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/adventurelog — 5 env vars, 0 encrypted, 2 sensitive fields +2026/10/25 17:16:54 setup_gate.go:511: [DEBUG] [stacks] romm: setup probe unreadable (Get "http://romm:8080/api/heartbeat": dial tcp: lookup romm on 192.168.0.250:53: no such host) — gate stays closed +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for adventurelog +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] adventurelog: install id 2c99f493b77aed71 recorded (an app installed before D47) +2026/10/25 17:16:54 watch.go:237: [DEBUG] [upwatch] plex: the app did not answer (resolving the plex container: lookup plex on 192.168.0.250:53: no such host) — treated as no number this minute +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for adventurelog → /mnt/sys_drive/felhom-data/backups/primary/adventurelog (images=3, secrets-referenced=2, data_keys=1, portable-carried=2/2, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/bentopdf — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for bentopdf +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] bentopdf: install id 17f35f4c0d87a32f recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for bentopdf → /mnt/sys_drive/felhom-data/backups/primary/bentopdf (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/bookstack — 4 env vars, 0 encrypted, 3 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for bookstack +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] bookstack: install id e172a289fd47c51d recorded (an app installed before D47) +2026/10/25 17:16:54 healthcheck.go:161: [DEBUG] [monitor] All protected containers running +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 healthcheck.go:176: [INFO] [monitor] Health check: status=ok +2026/10/25 17:16:54 healthcheck.go:180: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=4) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for bookstack → /mnt/sys_drive/felhom-data/backups/primary/bookstack (images=2, secrets-referenced=3, data_keys=1, portable-carried=2/2, withheld=1) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/calibre-web — 4 env vars, 0 encrypted, 2 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for calibre-web +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] calibre-web: install id a3ee4c39e2439d7b recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for calibre-web → /mnt/felhom-drives/hdd_1/backups/primary/calibre-web (images=1, secrets-referenced=2, data_keys=0, portable-carried=1/1, withheld=1) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/docmost — 4 env vars, 0 encrypted, 2 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for docmost +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] docmost: install id 7f50f75f42a6eab1 recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for docmost → /mnt/sys_drive/felhom-data/backups/primary/docmost (images=3, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/home-assistant — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for home-assistant +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] home-assistant: install id 919730e70cb01fe9 recorded (an app installed before D47) +2026/10/25 17:16:54 filebrowser_gate.go:68: [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for home-assistant → /mnt/sys_drive/felhom-data/backups/primary/home-assistant (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/opengist — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for opengist +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] opengist: install id d956c5ae9ac7b528 recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for opengist → /mnt/sys_drive/felhom-data/backups/primary/opengist (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/paperless-ngx — 8 env vars, 0 encrypted, 3 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for paperless-ngx +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] paperless-ngx: install id a1c1bb5a5103b37d recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for paperless-ngx → /mnt/felhom-drives/hdd_1/backups/primary/paperless-ngx (images=3, secrets-referenced=3, data_keys=0, portable-carried=2/2, withheld=1) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/plex — 3 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for plex +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] plex: install id 8a3ddf75968d32ab recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for plex → /mnt/felhom-drives/hdd_1/backups/primary/plex (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=20.8 GB avail=44.5GB (31.8%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/privatebin — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for privatebin +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] privatebin: install id 19340734630f84cd recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for privatebin → /mnt/sys_drive/felhom-data/backups/primary/privatebin (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:54 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/romm — 6 env vars, 0 encrypted, 3 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for romm +2026/10/25 17:16:54 deploy.go:1682: [INFO] [stacks] romm: install id e4637a49405a2049 recorded (an app installed before D47) +2026/10/25 17:16:54 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for romm → /mnt/felhom-drives/hdd_1/backups/primary/romm (images=3, secrets-referenced=3, data_keys=0, portable-carried=3/3, withheld=0) +2026/10/25 17:16:54 backup.go:1317: [INFO] [backup] Backup status cache refreshed +2026/10/25 17:16:55 client.go:67: [DEBUG] [agentapi] agent version seen: 0.165.0 (was "") +2026/10/25 17:16:55 client.go:1276: [DEBUG] [agentapi] GET /disks -> 200 (862ms) +2026/10/25 17:16:56 client.go:1276: [DEBUG] [agentapi] GET /disks -> 200 (840ms) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] CPUCollector: first sample — cpu=61.9% (idle=1549 total=4063) +2026/10/25 17:16:59 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:16:59 builder.go:37: [INFO] [report] Building system report +2026/10/25 17:16:59 builder.go:40: [DEBUG] [report] BuildReport: starting — version=0.343.0, storagePaths=1 +2026/10/25 17:16:59 notifier.go:317: [DEBUG] PushEvent: type=controller_started severity=info url=https://hub.felhom.eu/api/v1/event +2026/10/25 17:16:59 builder.go:62: [DEBUG] [report] BuildReport: configHash=042b71a3123d... (2989 bytes) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/10/25 17:16:59 notifier.go:343: [DEBUG] PushEvent: controller_started pushed OK (HTTP 200) +2026/10/25 17:16:59 notifier.go:355: [INFO] Event pushed: controller_started (info) [hu-only] — Controller elindult (0.343.0) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714380KB) → used≈16857MB avail≈9041MB +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714380 availKB=10722164 → total=25898MB avail=9041MB used=16857MB (65.1%) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=20.8GB avail=44.5GB (31.8%) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=225.2GB avail=665.0GB (25.3%) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readLoadAvg: raw="1.89 1.20 1.45 12/1545 459" → 1m=1.89 5m=1.20 15m=1.45 +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 61.6°C (hwmon2) +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] GetInfo done in 112ms — mem=16857MB/25898MB (65.1%), rootDisk=20.8GB/68.7GB (31.8%), load=1.89/1.20/1.45, temp=61.6°C (hwmon2), cpu=61.9% +2026/10/25 17:16:59 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:16:59 builder.go:128: [DEBUG] [report] BuildReport: system info collected — cpu=61.9%, mem=16857/25898MB, temp=61.6C +2026/10/25 17:16:59 builder.go:130: [DEBUG] [report] BuildReport: storage entries=2 +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714380KB) → used≈16793MB avail≈9105MB +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714380 availKB=10797116 → total=25898MB avail=9105MB used=16793MB (64.8%) +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=20.8GB avail=44.5GB (31.8%) +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=225.2GB avail=665.0GB (25.3%) +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readLoadAvg: raw="1.89 1.20 1.45 11/1541 475" → 1m=1.89 5m=1.20 15m=1.45 +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 62.5°C (hwmon2) +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] GetInfo done in 61ms — mem=16793MB/25898MB (64.8%), rootDisk=20.8GB/68.7GB (31.8%), load=1.89/1.20/1.45, temp=62.5°C (hwmon2), cpu=61.9% +2026/10/25 17:17:00 healthcheck.go:128: [DEBUG] [monitor] Raw values: disk=31.8%, hdd=25.3% (configured=true), mem=64.8% (16793MB/25898MB), cpu=61.9%, temp=62.5°C (hwmon2) +2026/10/25 17:17:00 healthcheck.go:409: [DEBUG] [monitor] SSD disk: OK (32%) +2026/10/25 17:17:00 healthcheck.go:445: [DEBUG] [monitor] Memory: OK (65%) +2026/10/25 17:17:00 healthcheck.go:464: [DEBUG] [monitor] CPU: OK (62%) +2026/10/25 17:17:00 healthcheck.go:483: [DEBUG] [monitor] Temperature: OK (62°C) +2026/10/25 17:17:00 healthcheck.go:145: [DEBUG] [monitor] Docker daemon: OK +2026/10/25 17:17:00 healthcheck.go:153: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/10/25 17:17:00 healthcheck.go:161: [DEBUG] [monitor] All protected containers running +2026/10/25 17:17:00 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=225.2 GB avail=665.0GB (25.3%) +2026/10/25 17:17:00 healthcheck.go:176: [INFO] [monitor] Health check: status=ok +2026/10/25 17:17:00 healthcheck.go:180: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: starting log scan for 21 containers (since 15m0s) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned adventurelog: errors=0 warnings=0 issues=0 (took 35ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned adventurelog-frontend: errors=0 warnings=0 issues=0 (took 33ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned adventurelog-postgres: errors=0 warnings=0 issues=0 (took 31ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bentopdf: errors=0 warnings=0 issues=0 (took 34ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bookstack: errors=0 warnings=0 issues=0 (took 29ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bookstack-db: errors=0 warnings=0 issues=0 (took 28ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned calibre-web: errors=0 warnings=0 issues=0 (took 31ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost: errors=0 warnings=0 issues=0 (took 35ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost-postgres: errors=0 warnings=0 issues=0 (took 32ms) +2026/10/25 17:17:00 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost-redis: errors=0 warnings=0 issues=0 (took 41ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned home-assistant: errors=0 warnings=3 issues=1 (took 37ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned opengist: errors=0 warnings=0 issues=0 (took 31ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-webserver: errors=0 warnings=0 issues=0 (took 33ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-postgres: errors=0 warnings=0 issues=0 (took 28ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-redis: errors=0 warnings=0 issues=0 (took 37ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned plex: errors=0 warnings=0 issues=0 (took 26ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned privatebin: errors=0 warnings=0 issues=0 (took 34ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm: errors=0 warnings=0 issues=0 (took 35ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm-redis: errors=0 warnings=0 issues=0 (took 34ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm-db: errors=0 warnings=0 issues=0 (took 30ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned felhom-controller: errors=0 warnings=3 issues=3 (took 42ms) +2026/10/25 17:17:01 logscanner.go:69: [DEBUG] [metrics] logscanner: log scan completed: 21 containers in 694ms +2026/10/25 17:17:01 builder.go:204: [DEBUG] [report] BuildReport: complete — containers=20, health=ok, deployed=12, available=53, app_telemetry=12 +2026/10/25 17:17:01 pusher.go:106: [DEBUG] [report] Push: url=https://hub.felhom.eu/api/v1/report payload=9977 bytes +2026/10/25 17:17:01 pusher.go:142: [INFO] [report] Hub report pushed successfully (9977 bytes) +2026/10/25 17:17:01 settings.go:970: [DEBUG] [settings] saved to /opt/docker/felhom-controller/data/settings.json (23056 bytes) +2026/10/25 17:17:01 settings.go:973: [INFO] [settings] Settings saved +2026/10/25 17:17:01 updater.go:104: [DEBUG] [selfupdate] SetFloor: floor "" → "0.343.0" +2026/10/25 17:17:01 updater.go:104: [DEBUG] [selfupdate] maybeAutoUpdate: current 0.343.0 >= floor 0.343.0 — no action +2026/10/25 17:17:01 main.go:1924: [INFO] Startup hub report sent +2026/10/25 17:17:04 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:04 offsiteapply.go:148: [INFO] [offsite-apply] settle-gate: GO — at/above floor 0.343.0 (we are 0.343.0), no managed update running +2026/10/25 17:17:04 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:17:04 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 11 targets (0 skipped not due, 0 skipped no container) +2026/10/25 17:17:04 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (2ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (8ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe paperless-ngx: HTTP GET :8000/ → 302 (8ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe plex: API GET :32400/identity → 200 (8ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (8ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe adventurelog: API GET :8000/api/ → 200 (9ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe privatebin: HTTP GET :8080/ → 200 (10ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (10ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe home-assistant: API GET :8123/api/ → 401 (10ms) +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe bentopdf: HTTP GET :8080/ → 200 (10ms) +2026/10/25 17:17:04 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:04 healthprobe.go:187: [DEBUG] Health probe bookstack: HTTP GET :80/ → 302 (44ms) +2026/10/25 17:17:04 healthprobe.go:167: [INFO] Health probes: 11 ok (of 11 probed) +2026/10/25 17:17:09 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:09 main.go:2844: [INFO] [bootrecon] boot window: fleet settled after 10s (3 identical samples 5s apart) — sweeping +2026/10/25 17:17:09 bootrecon.go:236: [INFO] [bootrecon] "kimai" is a boot orphan by intent but is HELD (held after a failed restore whose rollback also failed (2026-10-14T09:06:31Z) — clear the hold to start it) — NOT starting it; whatever is holding it owns its recovery +2026/10/25 17:17:09 bootrecon.go:251: [INFO] [bootrecon] Boot reconciliation: nothing to start — 1 app(s) held (absent drive / quiesce / app-data operation): [kimai] +2026/10/25 17:17:09 scheduler.go:85: [DEBUG] [scheduler] job docker-socket-watch: execution starting +2026/10/25 17:17:14 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bentopdf — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping plex — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping paperless-ngx — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping home-assistant — last check 10s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:14 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (11 skipped not due, 0 skipped no container) +2026/10/25 17:17:14 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:14 setup_gate.go:516: [DEBUG] [stacks] romm: setup probe SYSTEM.SHOW_SETUP_WIZARD = "true" (done when "false") +2026/10/25 17:17:24 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:17:24 scheduler.go:85: [DEBUG] [scheduler] job ring-spill: execution starting +2026/10/25 17:17:24 scheduler.go:85: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/10/25 17:17:24 scheduler.go:85: [DEBUG] [scheduler] job after-unclean-boot: execution starting +2026/10/25 17:17:24 scheduler.go:85: [DEBUG] [scheduler] job docker-socket-watch: execution starting +2026/10/25 17:17:24 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:17:24 crashboot.go:147: [INFO] [deadapp] boot grace 1m30s: the host's last unclean boot (2026-10-23T15:32:02Z) is not the one this start followed (R-856) +2026/10/25 17:17:24 aftercrash.go:106: [INFO] [aftercrash] a normal (or unknown) boot — no app repair after an unclean boot (R-1007) +2026/10/25 17:17:24 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping home-assistant — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bentopdf — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping plex — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping paperless-ngx — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:24 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (11 skipped not due, 0 skipped no container) +2026/10/25 17:17:26 updater.go:104: [DEBUG] [selfupdate] queryRegistry: anonymous mode, url=https://gitea.dooplex.hu/v2/admin/felhom-controller/tags/list +2026/10/25 17:17:26 updater.go:104: [DEBUG] [selfupdate] queryRegistry: anonymous plain GET HTTP 401 +2026/10/25 17:17:26 updater.go:104: [DEBUG] [selfupdate] queryRegistry: anonymous token request: https://gitea.dooplex.hu/v2/token?scope=repository%3Aadmin%2Ffelhom-controller%3Apull&service=container_registry +2026/10/25 17:17:26 updater.go:104: [DEBUG] [selfupdate] queryRegistry: anonymous tags/list with Bearer HTTP 200 +2026/10/25 17:17:26 updater.go:104: [DEBUG] [selfupdate] queryRegistry: 15 tags returned: [0.331.0 0.341.0 0.341.0-rc.1 0.342.0 0.342.0-rc.1 0.342.0-rc.2 0.343.0 0.343.0-rc.1 0.343.0-rc.2 0.343.0-rc.3 0.343.0-rc.4 0.343.0-rc.5 0.343.0-rc.6 0.343.0-rc.7 latest] +2026/10/25 17:17:26 updater.go:196: [INFO] [selfupdate] Current version 0.343.0 is up to date +2026/10/25 17:17:26 updater.go:104: [DEBUG] [selfupdate] version comparison: current=0.343.0 (0.343.0), latest=0.343.0 (0.343.0), cmp=0, updateAvailable=false +2026/10/25 17:17:26 client.go:1276: [DEBUG] [agentapi] GET /disks -> 200 (796ms) +2026/10/25 17:17:27 client.go:1276: [DEBUG] [agentapi] GET /disks -> 200 (806ms) +2026/10/25 17:17:34 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping home-assistant — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bentopdf — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping plex — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping paperless-ngx — last check 30s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:34 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (11 skipped not due, 0 skipped no container) +2026/10/25 17:17:34 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:17:34 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:34 setup_gate.go:516: [DEBUG] [stacks] romm: setup probe SYSTEM.SHOW_SETUP_WIZARD = "true" (done when "false") +2026/10/25 17:17:39 scheduler.go:85: [DEBUG] [scheduler] job docker-socket-watch: execution starting +2026/10/25 17:17:44 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:17:44 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping home-assistant — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bentopdf — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping plex — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping paperless-ngx — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:44 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (11 skipped not due, 0 skipped no container) +2026/10/25 17:17:44 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714380KB) → used≈16531MB avail≈9367MB +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714380 availKB=11108764 → total=25898MB avail=9367MB used=16531MB (63.8%) +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=20.8GB avail=44.5GB (31.8%) +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=225.2GB avail=665.0GB (25.3%) +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readLoadAvg: raw="1.24 1.12 1.41 7/1529 938" → 1m=1.24 5m=1.12 15m=1.41 +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 50.0°C (hwmon0) +2026/10/25 17:17:54 info.go:13: [DEBUG] [system] GetInfo done in 72ms — mem=16531MB/25898MB (63.8%), rootDisk=20.8GB/68.7GB (31.8%), load=1.24/1.12/1.41, temp=50.0°C (hwmon0), cpu=7.6% +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job after-unclean-boot: execution starting +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job ring-spill: execution starting +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping home-assistant — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bentopdf — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping plex — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping paperless-ngx — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/10/25 17:17:54 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (11 skipped not due, 0 skipped no container) +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job docker-socket-watch: execution starting +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/10/25 17:17:54 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:17:54 setup_gate.go:516: [DEBUG] [stacks] romm: setup probe SYSTEM.SHOW_SETUP_WIZARD = "true" (done when "false") +2026/10/25 17:17:54 scheduler.go:450: [INFO] [scheduler] Running job: agent-channel-health +2026/10/25 17:17:54 scheduler.go:85: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/10/25 17:17:55 client.go:1276: [DEBUG] [agentapi] GET /storage -> 200 (705ms) +2026/10/25 17:17:55 scheduler.go:467: [INFO] [scheduler] Job agent-channel-health completed (took 705ms) +2026/10/25 17:17:56 client.go:1276: [DEBUG] [agentapi] GET /disks -> 200 (794ms) +2026/10/25 17:17:57 client.go:1276: [DEBUG] [agentapi] GET /disks -> 200 (798ms) +2026/10/25 17:18:04 scheduler.go:85: [DEBUG] [scheduler] job status-refresh: execution starting +2026/10/25 17:18:04 scheduler.go:85: [DEBUG] [scheduler] job health-probes: execution starting +2026/10/25 17:18:04 manager.go:839: [INFO] [stacks] Status refresh: 23 containers across 69 stacks +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping home-assistant — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bentopdf — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping plex — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping paperless-ngx — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:64: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/10/25 17:18:04 healthprobe.go:110: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (11 skipped not due, 0 skipped no container) diff --git a/documentation/audits/release-2026-10-26/boxes-0.343.0/https-only.txt b/documentation/audits/release-2026-10-26/boxes-0.343.0/https-only.txt new file mode 100644 index 00000000..8682d689 --- /dev/null +++ b/documentation/audits/release-2026-10-26/boxes-0.343.0/https-only.txt @@ -0,0 +1,33 @@ +control NEGATIVE (a stub answering 200 over plain http): convicted, as it must (200 -) +== tester-1 (enkicsifelhom.hu): 6 public name(s) + OK control POSITIVE http://felhom.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://felhom.enkicsifelhom.hu/r1033-check?q=1 + OK http://files.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://files.enkicsifelhom.hu/r1033-check?q=1 + OK http://no-such-name-r1033.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://no-such-name-r1033.enkicsifelhom.hu/r1033-check?q=1 + OK http://paperless.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://paperless.enkicsifelhom.hu/r1033-check?q=1 + OK http://paste.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://paste.enkicsifelhom.hu/r1033-check?q=1 + OK http://wiki.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://wiki.enkicsifelhom.hu/r1033-check?q=1 +== demo-hp (enkisfelhom.hu): 14 public name(s) + OK http://arcade.enkisfelhom.hu/r1033-check?q=1 -> 301 https://arcade.enkisfelhom.hu/r1033-check?q=1 + OK http://books.enkisfelhom.hu/r1033-check?q=1 -> 301 https://books.enkisfelhom.hu/r1033-check?q=1 + OK http://docs.enkisfelhom.hu/r1033-check?q=1 -> 301 https://docs.enkisfelhom.hu/r1033-check?q=1 + OK http://felhom.enkisfelhom.hu/r1033-check?q=1 -> 301 https://felhom.enkisfelhom.hu/r1033-check?q=1 + OK http://files.enkisfelhom.hu/r1033-check?q=1 -> 301 https://files.enkisfelhom.hu/r1033-check?q=1 + OK http://gist.enkisfelhom.hu/r1033-check?q=1 -> 301 https://gist.enkisfelhom.hu/r1033-check?q=1 + OK http://ha.enkisfelhom.hu/r1033-check?q=1 -> 301 https://ha.enkisfelhom.hu/r1033-check?q=1 + OK http://no-such-name-r1033.enkisfelhom.hu/r1033-check?q=1 -> 301 https://no-such-name-r1033.enkisfelhom.hu/r1033-check?q=1 + OK http://papir.enkisfelhom.hu/r1033-check?q=1 -> 301 https://papir.enkisfelhom.hu/r1033-check?q=1 + OK http://paste.enkisfelhom.hu/r1033-check?q=1 -> 301 https://paste.enkisfelhom.hu/r1033-check?q=1 + OK http://pdf.enkisfelhom.hu/r1033-check?q=1 -> 301 https://pdf.enkisfelhom.hu/r1033-check?q=1 + OK http://plex.enkisfelhom.hu/r1033-check?q=1 -> 301 https://plex.enkisfelhom.hu/r1033-check?q=1 + OK http://travel.enkisfelhom.hu/r1033-check?q=1 -> 301 https://travel.enkisfelhom.hu/r1033-check?q=1 + OK http://wiki.enkisfelhom.hu/r1033-check?q=1 -> 301 https://wiki.enkisfelhom.hu/r1033-check?q=1 +== demo-felhom (demo-felhom.eu): 8 public name(s) + OK http://felhom.demo-felhom.eu/r1033-check?q=1 -> 301 https://felhom.demo-felhom.eu/r1033-check?q=1 + OK http://files.demo-felhom.eu/r1033-check?q=1 -> 301 https://files.demo-felhom.eu/r1033-check?q=1 + OK http://gist.demo-felhom.eu/r1033-check?q=1 -> 301 https://gist.demo-felhom.eu/r1033-check?q=1 + OK http://no-such-name-r1033.demo-felhom.eu/r1033-check?q=1 -> 301 https://no-such-name-r1033.demo-felhom.eu/r1033-check?q=1 + OK http://prowlarr.demo-felhom.eu/r1033-check?q=1 -> 301 https://prowlarr.demo-felhom.eu/r1033-check?q=1 + OK http://radarr.demo-felhom.eu/r1033-check?q=1 -> 301 https://radarr.demo-felhom.eu/r1033-check?q=1 + OK http://sonarr.demo-felhom.eu/r1033-check?q=1 -> 301 https://sonarr.demo-felhom.eu/r1033-check?q=1 + OK http://torrent.demo-felhom.eu/r1033-check?q=1 -> 301 https://torrent.demo-felhom.eu/r1033-check?q=1 +== every public name redirects http -> https diff --git a/documentation/audits/release-2026-10-26/boxes-0.343.0/tester-1-controller.log b/documentation/audits/release-2026-10-26/boxes-0.343.0/tester-1-controller.log new file mode 100644 index 00000000..a5f37944 --- /dev/null +++ b/documentation/audits/release-2026-10-26/boxes-0.343.0/tester-1-controller.log @@ -0,0 +1,139 @@ +2026/10/25 17:16:53 [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible +2026/10/25 17:16:53 [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false) +2026/10/25 17:16:53 [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false) +2026/10/25 17:16:53 [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true) +2026/10/25 17:16:53 [INFO] felhom-controller 0.343.0 starting (customer: tester-1, domain: enkicsifelhom.hu) +2026/10/25 17:16:53 [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json +2026/10/25 17:16:53 [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key +2026/10/25 17:16:53 [INFO] [stacks] Using compose command: docker compose +2026/10/25 17:16:53 [INFO] [stacks] ScanStacks complete: 68 stacks found (3 deployed, 65 available) +2026/10/25 17:16:53 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:16:53 [INFO] [stacks] InjectMissingFields: processed 3 stacks +2026/10/25 17:16:53 [INFO] [stacks] Encryption migration: no stacks needed migration +2026/10/25 17:16:53 [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s) +2026/10/25 17:16:53 [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 0 left unrecorded (state ambiguous — legacy boot behaviour retained) +2026/10/25 17:16:53 [INFO] [stacks] installed-images backfill: 0 app(s) recorded, 3 already had a record, 0 left unrecorded (could not be observed completely — unknown, which renders nothing) +2026/10/25 17:16:53 [INFO] [stacks] pin adoption: 0 pinned, 3 already pinned, 0 left unpinned (0 not completely observed, 0 running something the template no longer offers) +2026/10/25 17:16:53 [INFO] [stacks] applied-meta backfill (R-646): recorded 0 []; skipped 0 [] — not current with the catalog, their pinned version's .felhom.yml is no longer on the box +2026/10/25 17:16:53 [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s) +2026/10/25 17:16:53 [INFO] [sync] Starting catalog sync +2026/10/25 17:16:53 [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db +2026/10/25 17:16:53 [INFO] Metrics collector started (60s interval) +2026/10/25 17:16:53 [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main) +2026/10/25 17:16:53 [INFO] [tier2] start-up: no leftover second-drive copy container +2026/10/25 17:16:53 [INFO] [backup] restore record wired: /opt/docker/felhom-controller/data/restore-status.json (interrupted at startup: false) +2026/10/25 17:16:53 [INFO] [backup] app-data run record wired: /opt/docker/felhom-controller/data/appdata-run.json (an earlier cut still shown: false) +2026/10/25 17:16:53 [INFO] Notifier enabled (hub: https://hub.felhom.eu) +2026/10/25 17:16:53 [INFO] [upwatch] the host's weekly line test: 94.3 Mbit/s (measured 2026-10-24T08:00:58Z) +2026/10/25 17:16:53 [INFO] [upwatch] upload and CPU watch started (line 94 Mbit/s, qBittorrent share 50 %) +2026/10/25 17:16:53 [INFO] [selfupdate] Post-update startup: update successful (0.342.0 → 0.343.0) +2026/10/25 17:16:53 [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: status-refresh (every 10s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: docker-socket-watch (every 15s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: docker-socket-users (every 5m0s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: health-probes (every 10s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: system-health (every 5m0s) +2026/10/25 17:16:53 [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: after-unclean-boot (every 30s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: ring-spill (every 30s) +2026/10/25 17:16:53 [INFO] [scheduler] Daily job db-dump scheduled for 2026-10-26 02:30 CET +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: conversion-copy-release (every 1h0m0s) +2026/10/25 17:16:53 [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-10-26 03:30 CET +2026/10/25 17:16:53 [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-10-26 04:15 CET +2026/10/25 17:16:53 [INFO] [catch-up] controller start: no backup leg missed its last scheduled time — nothing to make up +2026/10/25 17:16:53 [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-10-26 05:10 CET +2026/10/25 17:16:53 [INFO] [scheduler] Daily job offsite-integrity scheduled for 2026-10-26 06:00 CET +2026/10/25 17:16:53 [INFO] [scheduler] Daily job offsite-proof scheduled for 2026-10-26 05:30 CET +2026/10/25 17:16:53 [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-10-26 04:00 CET +2026/10/25 17:16:53 [INFO] [scheduler] Daily job fill-watch scheduled for 2026-10-26 03:30 CET +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: fill-watch-interval (every 10m0s) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s) +2026/10/25 17:16:53 [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu) +2026/10/25 17:16:53 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s) +2026/10/25 17:16:53 [INFO] ========== Startup Self-Test ========== +2026/10/25 17:16:54 [INFO] Event pushed: controller_updated (info) [hu-only] — Controller frissítve: 0.342.0 → 0.343.0 +2026/10/25 17:16:54 [INFO] [PASS] Docker socket: reachable (v29.8.2) +2026/10/25 17:16:54 [INFO] [PASS] Stacks directory: /opt/docker/stacks +2026/10/25 17:16:54 [INFO] [PASS] Data directory: /opt/docker/felhom-controller/data (writable) +2026/10/25 17:16:54 [INFO] [PASS] System data path: /mnt/sys_drive +2026/10/25 17:16:54 [INFO] [PASS] Storage paths: 1 connected, 0 disconnected +2026/10/25 17:16:54 [INFO] [PASS] Git catalog: 65 app definitions found +2026/10/25 17:16:54 [INFO] [PASS] Hub connectivity: https://hub.felhom.eu reachable (HTTP 200) +2026/10/25 17:16:54 [INFO] [PASS] Metrics DB: 35.9 MB +2026/10/25 17:16:54 [INFO] ======================================== +2026/10/25 17:16:54 [INFO] Self-test complete: 8 passed, 0 warnings, 0 failed +2026/10/25 17:16:54 [INFO] [scheduler] Starting scheduler with 23 jobs +2026/10/25 17:16:54 [INFO] [scheduler] Registered periodic job: geo-verify (every 6h0m0s) +2026/10/25 17:16:54 [INFO] Geo-restriction support enabled (CF API token configured) +2026/10/25 17:16:54 [INFO] [report] hub wait channel active (hold ≤240s) +2026/10/25 17:16:54 [INFO] [backup] Found 2 DB dump files across drives +2026/10/25 17:16:54 [INFO] [infra] connected felhom-controller to traefik-public +2026/10/25 17:16:54 [INFO] [web] sessions: restored 12 dashboard session(s) from disk (dropped 0 expired, 0 malformed) +2026/10/25 17:16:54 [INFO] [web] Auth: using password from settings.json +2026/10/25 17:16:54 [INFO] [scheduler] Registered periodic job: disk-health-check (every 1h0m0s) +2026/10/25 17:16:54 [INFO] [scheduler] Registered periodic job: agent-channel-health (every 1m0s) +2026/10/25 17:16:54 [INFO] Web UI listening on :8080 +2026/10/25 17:16:54 [INFO] [web] FileBrowser: drive /mnt/felhom-drives/media_a not mounted — skipping userdata skeleton +2026/10/25 17:16:54 [INFO] [web] FileBrowser: drive /mnt/felhom-drives/media_b not mounted — skipping userdata skeleton +2026/10/25 17:16:54 [INFO] [web] FileBrowser: drive /mnt/felhom-drives/media_c not mounted — skipping userdata skeleton +2026/10/25 17:16:54 [INFO] [web] FileBrowser: drive /mnt/felhom-drives/media_d not mounted — skipping userdata skeleton +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:54 [INFO] [backup] Discovered 2 databases +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:54 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/10/25 17:16:54 [INFO] [backup] Discovered app data: 3 apps +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/bookstack — 5 env vars, 0 encrypted, 3 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for bookstack +2026/10/25 17:16:54 [INFO] [stacks] bookstack: install id 27a3384799fbbc3f recorded (an app installed before D47) +2026/10/25 17:16:54 [INFO] [backup] Recovery unit captured for bookstack → /mnt/sys_drive/felhom-data/backups/primary/bookstack (images=2, secrets-referenced=3, data_keys=1, portable-carried=2/2, withheld=1) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/paperless-ngx — 8 env vars, 0 encrypted, 3 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for paperless-ngx +2026/10/25 17:16:54 [INFO] [stacks] paperless-ngx: install id 694723ce3390099b recorded (an app installed before D47) +2026/10/25 17:16:54 [INFO] [backup] Recovery unit captured for paperless-ngx → /mnt/felhom-drives/adatlemez/backups/primary/paperless-ngx (images=3, secrets-referenced=3, data_keys=0, portable-carried=2/2, withheld=1) +2026/10/25 17:16:54 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/privatebin — 2 env vars, 0 encrypted, 0 sensitive fields +2026/10/25 17:16:54 [INFO] [stacks] SaveAppConfig: saved config for privatebin +2026/10/25 17:16:54 [INFO] [stacks] privatebin: install id 6b00861f43793b20 recorded (an app installed before D47) +2026/10/25 17:16:54 [INFO] [backup] Recovery unit captured for privatebin → /mnt/sys_drive/felhom-data/backups/primary/privatebin (images=1, secrets-referenced=0, data_keys=0, portable-carried=0/0, withheld=0) +2026/10/25 17:16:54 [INFO] [backup] Backup status cache refreshed +2026/10/25 17:16:54 [INFO] [sync] Catalog sync complete +2026/10/25 17:16:54 [INFO] [sync] Initial sync: Sablonok naprakészek — nincs változás +2026/10/25 17:16:54 [INFO] [web] FileBrowser sync — no config/compose change, ensured running without recreate (5 storage path(s)) +2026/10/25 17:16:54 [INFO] [monitor] Health check: status=ok +2026/10/25 17:16:54 [INFO] [infra] connected felhom-controller to felhom-filebrowser (the FileBrowser default-login check, R-1126) +2026/10/25 17:16:58 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:16:59 [INFO] [report] Building system report +2026/10/25 17:16:59 [INFO] Event pushed: controller_started (info) [hu-only] — Controller elindult (0.343.0) +2026/10/25 17:17:00 [INFO] [monitor] Health check: status=ok +2026/10/25 17:17:00 [INFO] [report] Hub report pushed successfully (5247 bytes) +2026/10/25 17:17:00 [INFO] [settings] Settings saved +2026/10/25 17:17:00 [INFO] Startup hub report sent +2026/10/25 17:17:03 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:03 [INFO] [offsite-apply] settle-gate: GO — at/above floor 0.343.0 (we are 0.343.0), no managed update running +2026/10/25 17:17:04 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:04 [INFO] Health probes: 3 ok (of 3 probed) +2026/10/25 17:17:08 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:08 [INFO] [bootrecon] boot window: fleet settled after 10s (3 identical samples 5s apart) — sweeping +2026/10/25 17:17:08 [INFO] [bootrecon] Boot reconciliation: no boot-orphaned apps (nothing to start) +2026/10/25 17:17:14 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:24 [INFO] [deadapp] boot grace 1m30s: the host's last unclean boot (2026-10-24T17:44:02Z) is not the one this start followed (R-856) +2026/10/25 17:17:24 [INFO] [aftercrash] a normal (or unknown) boot — no app repair after an unclean boot (R-1007) +2026/10/25 17:17:24 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:25 [INFO] [selfupdate] Current version 0.343.0 is up to date +2026/10/25 17:17:34 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:44 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:54 [INFO] [stacks] Status refresh: 9 containers across 68 stacks +2026/10/25 17:17:54 [INFO] [scheduler] Running job: agent-channel-health +2026/10/25 17:17:54 [INFO] [scheduler] Job agent-channel-health completed (took 551ms) diff --git a/documentation/audits/release-2026-10-26/byo/byo-install.log b/documentation/audits/release-2026-10-26/byo/byo-install.log new file mode 100644 index 00000000..3939589c --- /dev/null +++ b/documentation/audits/release-2026-10-26/byo/byo-install.log @@ -0,0 +1,159 @@ + +[0;32m[INFO][0m felhom-host-install v1.36.0 — mode=byo customer=Tester4 vmid=9201 + +[0;34m[STEP][0m 1/8 pre-flight +[0;32m[INFO][0m pve-manager/9.2.2/b9984c6d90a4bd80 (running kernel: 7.0.2-6-pve) +[0;32m[INFO][0m node: byo-test (explicit) +[0;32m[INFO][0m agent config: /etc/felhom-agent/agent.json +[0;32m[INFO][0m agent: not installed yet — will be fetched + installed in step 5/8 +[0;32m[INFO][0m local-lvm free: ~29 GiB +[1;33m[WARN][0m local-lvm free ~29 GiB is below the recommended 120 GiB — the install continues; proceed only if you sized the grows deliberately +[0;32m[INFO][0m free RAM: ~6285 MiB +[0;32m[INFO][0m existing guests on this host: 0 (pct+qm) +[0;32m[INFO][0m archive storage 'local' present +[0;32m[INFO][0m acl storages all present or pre-positioned: local local-lvm +[0;32m[INFO][0m dnsmasq: not present before Felhom — recorded; uninstall will remove it again if we install it +[0;32m[INFO][0m host DNS (:53): free +[0;32m[INFO][0m hub reachable (https://hub.felhom.eu) +[0;32m[OK][0m customer 'Tester4' exists + passphrase valid +[0;32m[INFO][0m golden: none local — will fetch + verify from Gitea in step 7/8 + +[0;34m[STEP][0m BYO disclosure — installing Felhom on a host the operator does NOT own will create: + pveum: roles FelhomAgentBase/FelhomAgentGuest/FelhomAgentStore + user felhom-agent@pve + token felhom-agent@pve!agent + + scoped ACL grants (Base@/, Guest@/pool/felhom, Store@[local local-lvm]) + the 'felhom' pool + agent: service user felhom-agent + /usr/local/bin/felhom-agent (+ .bak-* backups; A/B slots via the guarded self-update) + + /etc/systemd/system/felhom-agent.service (+ felhom-agent-rollback.service + start-limit drop-in) + + /etc/sudoers.d/felhom-agent + state dir /var/lib/felhom-agent + config /etc/felhom-agent/agent.json (0600) + host: /usr/local/sbin/felhom-mkfs-guarded + /usr/local/sbin/felhom-selfupdate-guarded + + /usr/local/sbin/felhom-pbs-apply (PBS-DR apply wrapper — DR capability is baked + on every install; ACTIVATION stays a hub flag, off = zero effect on this host) + + felhom-mgmt-watchdog service+timer+script + /etc/tmpfiles.d/felhom-privsep.conf + + /usr/local/sbin/felhom-priv-apply + the guest-hook snippet under /var/lib/vz/snippets/ + (both from the agent's config bundle) + + the 'sudo' and 'age' packages if absent + install state dir /var/lib/felhom-install + wg: an OUTBOUND WireGuard tunnel to the Felhom hub (wg_tunnel.enabled=true — base + infrastructure like the cloudflared tunnel; hands-free peer registration; the + operator can disable it per-customer hub-side on request) + guest: the provisioned Felhom LXC (vmid 9201, capped 2 cores / 4096 MiB) + its volumes + + the golden vzdump imported onto storage 'local' + reuse: a golden already on 'local' is used only if its sha256 or its controller version + matches the hub's vouched golden; otherwise the vouched one is fetched (a --golden you name is refused) + update: operator-signed self-update authority: felhom-op-1 + NOT touched in byo mode: root@pam (no break-glass), host DNS (:53), OOB sshd. + +Type this host's short hostname (byo-test) to acknowledge the byo install: [0;32m[OK][0m byo install acknowledged for host byo-test +[0;32m[OK][0m pre-flight passed +[0;34m[STEP][0m 2/8 Proxmox API token +[0;32m[OK][0m token minted (secret captured, not logged) +[0;32m[OK][0m scoped ACL applied (Base@/, Guest@/pool/felhom + /vms/990000..990009, Store@[local local-lvm]) +[0;36m[SKIP][0m old broad role FelhomAgent already absent +[0;34m[STEP][0m 3/8 compute volume grows +[0;32m[INFO][0m auto-computed from a 29 GiB thin pool (16 §7: 50/100/130 GiB) +[0;32m[INFO][0m grows: rootfs +0G (->32G), data +26G (->50G, ONE volume) +[0;34m[STEP][0m 4/8 host enrollment (POST /host-enroll) +[0;32m[OK][0m host MINTED (first enroll) +[0;32m[INFO][0m host_id: Tester4-f967d4 (api_key captured, not logged) +[0;36m[SKIP][0m break-glass (step 4b) SKIPPED (byo: the host owner manages break-glass; root@pam untouched, nothing vaulted) +[0;34m[STEP][0m 5/8 agent install (fetch + verify + install) +[0;36m[SKIP][0m apt repo alignment skipped (byo — the owner manages repos) +[1;33m[WARN][0m no git credential in controller.yaml — fetching artifacts ANONYMOUSLY (they are world-readable; sha256 verification unchanged) +[0;32m[INFO][0m manifest: agent v0.164.0 (sha 1b803d8b70f8afbe…), golden v0.331.0 +[0;32m[INFO][0m fetching agent binary v0.164.0 from Gitea … +[0;32m[OK][0m verified sha256 1b803d8b70f8afbe… matches the hub manifest +[0;32m[OK][0m installed /usr/local/bin/felhom-agent (felhom-agent 0.164.0) +[0;32m[INFO][0m installing the 'sudo' package (required for the non-root agent model) … +[0;32m[OK][0m sudo installed (Sudo version 1.9.16p2) +[0;32m[INFO][0m installing the 'age' package (escrow ceremony identity-wrap dependency) … +[0;32m[OK][0m age installed (1.2.1) +[0;32m[OK][0m created service user felhom-agent +[0;32m[OK][0m added felhom-agent to systemd-journal (unprivileged journal read for NAS verify) +[0;32m[OK][0m verified sha256 1d7b54d39d0c1aff… matches the hub manifest + os-apply: BUNDLE START agent=0.164.0 sha=1d7b54d39d0c1aff authority=installer files=32 write=26 same=2 kept=0 skipped=4 + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-mkfs-guarded (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-selfupdate-guarded (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-pbs-apply (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-backup-target-apply (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-vzdump-partial-clean (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-thin-check (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-internal-place (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-crash-guard (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-priv-apply (new) + os-apply: BUNDLE WROTE /var/lib/vz/snippets/felhom-guest-hook.sh (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-shared-parent.sh (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-shared-parent.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard-check.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard-check.timer (new) + os-apply: BUNDLE WROTE /etc/felhom/crash-guard.conf (new) + os-apply: BUNDLE WROTE /etc/grub.d/01_felhom_oneshot (new) + os-apply: BUNDLE WROTE /etc/grub.d/42_felhom_oneshot (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent-rollback.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent.service.d/felhom-agent-limits.conf (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-mgmt-watchdog (new) + os-apply: BUNDLE WROTE /etc/tmpfiles.d/felhom-privsep.conf (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-mgmt-watchdog.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-mgmt-watchdog.timer (new) + os-apply: BUNDLE WROTE /etc/sudoers.d/felhom-agent (new) + os-apply: BUNDLE DONE agent=0.164.0 written=26 same=2 self-check=ok signers-created=False +[0;32m[OK][0m installed every root-owned file from config bundle v0.164.0 (sha 1d7b54d39d0c1aff…; checked, previous copies kept) +[0;36m[SKIP][0m OOB (felhom-sshd) off (byo, or appliance --no-oob) — the bundle skipped its files +[0;34m[STEP][0m 5b/8 internal data place (Belső tárhely) +[0;36m[SKIP][0m byo: the host owner's thin pool is not ours to divide — no internal place +[0;34m[STEP][0m 6/8 agent config + service +[1;33m[WARN][0m backup target: DEGRADED — no eligible second drive, so the whole-system backup stays on the SYSTEM drive. +[1;33m[WARN][0m It protects against file corruption but NOT against a disk failure. Attach a second drive and assign it in the dashboard. +[0;32m[INFO][0m node=byo-test local_api=192.168.0.151:8443 tls_fp=7E:77:41:86:26:92… +[0;32m[OK][0m wrote /etc/felhom-agent/agent.json (0600 felhom-agent) +[0;32m[OK][0m byo config asserts passed (lan_resolver.enable / oob.enabled off; deployment_mode=byo; wg_tunnel intentionally ON — base infrastructure) +[0;32m[OK][0m agent --selftest (read-only) passed +[0;32m[OK][0m felhom-agent service active (non-root felhom-agent reads the config OK) +[0;32m[OK][0m wrote /etc/felhom/os-trust.json + operator-signers (felhom-op-1) — the root-owned slow-lane anchors +[0;34m[STEP][0m 7/8 golden archive +[1;33m[WARN][0m no git credential in controller.yaml — fetching artifacts ANONYMOUSLY (they are world-readable; sha256 verification unchanged) +[0;32m[INFO][0m fetching golden v0.331.0 from Gitea → /var/lib/vz/dump/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst +[0;32m[OK][0m verified sha256 3881de62b0986ccb… matches the hub manifest +[0;32m[OK][0m golden imported + verified: local:backup/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst +[0;34m[STEP][0m 8/8 provision guest 9201 +[0;36m[SKIP][0m pool felhom already exists +=== felhom-agent 0.164.0 selftest=provision (vmid=9201 customer=Tester4 hostname=tester4) === + --- front half: bring-up (provision) local:backup/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst → vmid 9201 --- +time=2026-10-25T17:53:51.729+01:00 level=INFO msg="bring-up: pool membership re-asserted" vmid=9201 pool=felhom + [OK] front half: vmid 9201 up (boot+running) in 1m26s; MAC=BC:24:11:4B:04:4E + --- back half: mint per-guest token + populate bootstrap config mount --- +time=2026-10-25T17:53:56.751+01:00 level=INFO msg="provision: back-half complete" vmid=9201 mount=mp9 guest_path=/etc/felhom-bootstrap endpoint=192.168.0.151:8443 + [OK] back half: bootstrap mount mp9 → /etc/felhom-bootstrap on vmid 9201 (host dir /var/lib/felhom-agent/guests/9201/bootstrap) + local-api endpoint 192.168.0.151:8443 · leaf fp f09a20d4c01686516db562b6acc9aa7e95581d69c2318fccf7894ed772ef4a8e · token: minted (not printed) +=== selftest=provision OK — guest 9201 provisioned + bootstrap-mounted (KEPT) === + next: reboot the guest → the golden's baked controller-bootstrap unit deploys the controller, + which PULLS its controller.yaml from the hub (retrieval passphrase) and merges in this local_api. +[0;32m[OK][0m provision completed +[0;32m[INFO][0m rebooting guest 9201 so the baked controller-bootstrap unit picks up the mount +[0;34m[STEP][0m verify +[0;32m[OK][0m pct status: running +[0;32m[OK][0m onboot: 1 + mp0: local-lvm:vm-9201-disk-1,mp=/var/lib/felhom,backup=1,size=50G + mp8: /mnt/felhom-drives,mp=/mnt/felhom-drives + rootfs: local-lvm:vm-9201-disk-0,size=32G +[0;32m[OK][0m pool: guest 9201 is a member of felhom +[0;32m[OK][0m acl: FelhomAgentBase@/ present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/pool/felhom present (user+token) +[0;32m[OK][0m acl: FelhomAgentStore@/storage/local present (user+token) +[0;32m[OK][0m acl: FelhomAgentStore@/storage/local-lvm present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990000 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990001 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990002 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990003 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990004 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990005 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990006 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990007 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990008 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990009 present (user+token) +[0;32m[OK][0m authz signers: 2 (operator-signed self-update armed) +[0;32m[OK][0m controller: Up 5 seconds (healthy) (after ~0s) +[0;32m[INFO][0m controller image: gitea.dooplex.hu/admin/felhom-controller:0.342.0 +[1;33m[WARN][0m cloudflared not visible yet +[0;32m[INFO][0m (confirm in the hub UI that host Tester4-f967d4 reports guest 9201) + +[0;32m[OK][0m Day-0 provision SUCCESS — vmid=9201 host_id=Tester4-f967d4 customer=Tester4 golden=local:backup/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst diff --git a/documentation/audits/release-2026-10-26/byo/byo-proof.txt b/documentation/audits/release-2026-10-26/byo/byo-proof.txt new file mode 100644 index 00000000..aa735b44 --- /dev/null +++ b/documentation/audits/release-2026-10-26/byo/byo-proof.txt @@ -0,0 +1,73 @@ +# BYO test host byo-test (VM 9371 on demo-hp), host_id Tester4-f967d4, 2026-10-25 +## planted before the install: our 0.164.0 drop-in, sha256 f0485da5… (copied from Tester 1) +felhom-agent 0.165.0 +root 644 /var/lib/felhom-install/state.json +install mode: byo +## sshd_config.d now: +total 8 +drwxr-xr-x 2 root root 4096 Oct 25 18:22 . +drwxr-xr-x 4 root root 4096 Oct 25 17:37 .. +permitrootlogin yes +passwordauthentication yes +## journal (os-apply + agent, 17:40–18:25) +Oct 25 17:52:07 byo-test felhom-os-apply[4082]: os-apply: BUNDLE START agent=0.164.0 sha=1d7b54d39d0c1aff authority=installer files=32 write=26 same=2 kept=0 skipped=4 +Oct 25 17:52:07 byo-test felhom-os-apply[4083]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-mkfs-guarded (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4084]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-selfupdate-guarded (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4085]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-pbs-apply (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4086]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-backup-target-apply (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4087]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-vzdump-partial-clean (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4088]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-thin-check (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4089]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-internal-place (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4090]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-crash-guard (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4091]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-priv-apply (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4092]: os-apply: BUNDLE WROTE /var/lib/vz/snippets/felhom-guest-hook.sh (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4093]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-shared-parent.sh (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4094]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-shared-parent.service (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4095]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard.service (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4096]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard-check.service (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4097]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard-check.timer (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4098]: os-apply: BUNDLE WROTE /etc/felhom/crash-guard.conf (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4099]: os-apply: BUNDLE WROTE /etc/grub.d/01_felhom_oneshot (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4100]: os-apply: BUNDLE WROTE /etc/grub.d/42_felhom_oneshot (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4101]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent.service (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4102]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent-rollback.service (new) +Oct 25 17:52:07 byo-test felhom-os-apply[4103]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent.service.d/felhom-agent-limits.conf (new) +Oct 25 17:52:08 byo-test felhom-os-apply[4104]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-mgmt-watchdog (new) +Oct 25 17:52:08 byo-test felhom-os-apply[4105]: os-apply: BUNDLE WROTE /etc/tmpfiles.d/felhom-privsep.conf (new) +Oct 25 17:52:08 byo-test felhom-os-apply[4106]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-mgmt-watchdog.service (new) +Oct 25 17:52:08 byo-test felhom-os-apply[4107]: os-apply: BUNDLE WROTE /etc/systemd/system/felhom-mgmt-watchdog.timer (new) +Oct 25 17:52:08 byo-test felhom-os-apply[4108]: os-apply: BUNDLE WROTE /etc/sudoers.d/felhom-agent (new) +Oct 25 17:52:09 byo-test felhom-os-apply[4235]: os-apply: BUNDLE DONE agent=0.164.0 written=26 same=2 self-check=ok signers-created=False +Oct 25 17:52:11 byo-test felhom-os-apply[4417]: os-apply: REFUSED: R12 this box was installed as 'byo', not appliance — its host belongs to its owner +Oct 25 17:52:11 byo-test felhom-agent[4389]: time=2026-10-25T17:52:11.013+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: REFUSED: R12 this box was installed as 'byo', not appliance — its host belongs to its owner" +Oct 25 17:52:12 byo-test felhom-agent[4389]: time=2026-10-25T17:52:12.970+01:00 level=INFO msg="capabilities self-check" ok=70 total=76 degraded=1 inactive=5 +Oct 25 18:02:41 byo-test felhom-agent[4389]: time=2026-10-25T18:02:41.293+01:00 level=INFO msg="osupdate: docker step skipped — ring 1 takes an engine set only inside a signed operator job (`11` §5.8)" run=20261025T170128Z vmid=9201 trigger=night ring=1 enabled=true +Oct 25 18:02:41 byo-test felhom-agent[4389]: time=2026-10-25T18:02:41.293+01:00 level=INFO msg="osupdate: pve step skipped — ring 1 takes a Proxmox set only inside a signed operator job (`11` §5.10)" run=20261025T170128Z vmid=9201 trigger=night ring=1 enabled=true +Oct 25 18:07:19 byo-test felhom-agent[4389]: time=2026-10-25T18:07:19.468+01:00 level=INFO msg="desired: hub reports pending signed ops (fetch/execute is slice 10B)" +Oct 25 18:07:19 byo-test felhom-agent[4389]: time=2026-10-25T18:07:19.475+01:00 level=WARN msg="signedjobs: AUTHORIZED signed op — executing" job=1c622afc4aec7208 op=agent_update key_id=felhom-op-1 nonce=8abd1cd5faf79f4ce21dfc5b55d49d84 +Oct 25 18:07:20 byo-test felhom-os-apply[27473]: os-apply: AGENT-UPDATE signed by the operator: version=0.165.0 sha=e9d04a47ee85222c — handing the root copy to the A/B wrapper +Oct 25 18:07:20 byo-test felhom-agent[4389]: time=2026-10-25T18:07:20.446+01:00 level=WARN msg="signedjobs: signed op COMPLETED" job=1c622afc4aec7208 op=agent_update +Oct 25 18:07:20 byo-test felhom-agent[4389]: time=2026-10-25T18:07:20.497+01:00 level=WARN msg="signedjobs: AUTHORIZED signed op — executing" job=d885aae390b02162 op=agent_config_update key_id=felhom-op-1 nonce=2cfa2580f3917ea3ed018d0c2233f81f +Oct 25 18:07:20 byo-test felhom-os-apply[27523]: os-apply: BUNDLE START agent=0.165.0 sha=8dea1f34d77ba40a authority=signed files=32 write=1 same=26 kept=1 skipped=4 +Oct 25 18:07:20 byo-test felhom-os-apply[27527]: os-apply: BUNDLE WROTE /usr/local/sbin/felhom-os-apply (replaced) +Oct 25 18:07:21 byo-test felhom-os-apply[27603]: os-apply: BUNDLE DONE agent=0.165.0 written=1 same=26 self-check=ok signers-created=False +Oct 25 18:07:21 byo-test felhom-agent[4389]: time=2026-10-25T18:07:21.547+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE START agent=0.165.0 sha=8dea1f34d77ba40a authority=signed files=32 write=1 same=26 kept=1 skipped=4" +Oct 25 18:07:21 byo-test felhom-agent[4389]: time=2026-10-25T18:07:21.547+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE WROTE /usr/local/sbin/felhom-os-apply (replaced)" +Oct 25 18:07:21 byo-test felhom-agent[4389]: time=2026-10-25T18:07:21.547+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE DONE agent=0.165.0 written=1 same=26 self-check=ok signers-created=False" +Oct 25 18:07:22 byo-test felhom-agent[4389]: time=2026-10-25T18:07:22.499+01:00 level=WARN msg="osupdate: capability probe after the config bundle" ok=71 total=76 degraded=pve:store-grant:felhom-pbs +Oct 25 18:07:22 byo-test felhom-agent[4389]: time=2026-10-25T18:07:22.500+01:00 level=WARN msg="signedjobs: signed op COMPLETED" job=d885aae390b02162 op=agent_config_update +Oct 25 18:07:23 byo-test felhom-os-apply[27793]: os-apply: REFUSED: R12 this box was installed as 'byo', not appliance — its host belongs to its owner +Oct 25 18:07:23 byo-test felhom-agent[27763]: time=2026-10-25T18:07:23.572+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: REFUSED: R12 this box was installed as 'byo', not appliance — its host belongs to its owner" +Oct 25 18:07:24 byo-test felhom-agent[27763]: time=2026-10-25T18:07:24.350+01:00 level=INFO msg="capabilities self-check" ok=76 total=76 degraded=0 inactive=0 +Oct 25 18:08:25 byo-test felhom-agent[27763]: time=2026-10-25T18:08:25.030+01:00 level=WARN msg="selfupdate: update committed" version=0.165.0 wrapper="" +Oct 25 18:22:34 byo-test felhom-agent[27763]: time=2026-10-25T18:22:34.999+01:00 level=WARN msg="signedjobs: AUTHORIZED signed op — executing" job=cc915dd2020e42b0 op=agent_config_update key_id=felhom-op-1 nonce=8083346e293da88779c3c975d4e8abae +Oct 25 18:22:35 byo-test felhom-os-apply[39714]: os-apply: BUNDLE /etc/ssh/sshd_config.d/10-felhom-root-key-only.conf: a BYO host keeps its own settings (D43) — removing the copy we wrote +Oct 25 18:22:35 byo-test felhom-os-apply[39715]: os-apply: BUNDLE START agent=0.165.0 sha=8dea1f34d77ba40a authority=signed files=32 write=0 same=26 kept=1 skipped=4 +Oct 25 18:22:35 byo-test felhom-os-apply[39716]: os-apply: BUNDLE REMOVED /etc/ssh/sshd_config.d/10-felhom-root-key-only.conf (ours, on a BYO host — D43) +Oct 25 18:22:36 byo-test felhom-os-apply[39816]: os-apply: BUNDLE DONE agent=0.165.0 written=0 same=26 self-check=ok signers-created=False +Oct 25 18:22:36 byo-test felhom-agent[27763]: time=2026-10-25T18:22:36.194+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE /etc/ssh/sshd_config.d/10-felhom-root-key-only.conf: a BYO host keeps its own settings (D43) — removing the copy we wrote" +Oct 25 18:22:36 byo-test felhom-agent[27763]: time=2026-10-25T18:22:36.194+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE START agent=0.165.0 sha=8dea1f34d77ba40a authority=signed files=32 write=0 same=26 kept=1 skipped=4" +Oct 25 18:22:36 byo-test felhom-agent[27763]: time=2026-10-25T18:22:36.194+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE REMOVED /etc/ssh/sshd_config.d/10-felhom-root-key-only.conf (ours, on a BYO host — D43)" +Oct 25 18:22:36 byo-test felhom-agent[27763]: time=2026-10-25T18:22:36.194+01:00 level=INFO msg="osupdate: wrapper" line="os-apply: BUNDLE DONE agent=0.165.0 written=0 same=26 self-check=ok signers-created=False" +Oct 25 18:22:37 byo-test felhom-agent[27763]: time=2026-10-25T18:22:37.238+01:00 level=WARN msg="osupdate: capability probe after the config bundle" ok=76 total=76 degraded="" +Oct 25 18:22:37 byo-test felhom-agent[27763]: time=2026-10-25T18:22:37.238+01:00 level=WARN msg="signedjobs: signed op COMPLETED" job=cc915dd2020e42b0 op=agent_config_update diff --git a/documentation/audits/release-2026-10-26/byo/install-console.txt b/documentation/audits/release-2026-10-26/byo/install-console.txt new file mode 100644 index 00000000..689452fb --- /dev/null +++ b/documentation/audits/release-2026-10-26/byo/install-console.txt @@ -0,0 +1,162 @@ + +[0;32m[INFO][0m felhom-host-install v1.36.0 — mode=byo customer=Tester4 vmid=9201 + +[0;34m[STEP][0m 1/8 pre-flight +[0;32m[INFO][0m pve-manager/9.2.2/b9984c6d90a4bd80 (running kernel: 7.0.2-6-pve) +[0;32m[INFO][0m node: byo-test (explicit) +[0;32m[INFO][0m agent config: /etc/felhom-agent/agent.json +[0;32m[INFO][0m agent: not installed yet — will be fetched + installed in step 5/8 +[0;32m[INFO][0m local-lvm free: ~29 GiB +[1;33m[WARN][0m local-lvm free ~29 GiB is below the recommended 120 GiB — the install continues; proceed only if you sized the grows deliberately +[0;32m[INFO][0m free RAM: ~6285 MiB +[0;32m[INFO][0m existing guests on this host: 0 (pct+qm) +[0;32m[INFO][0m archive storage 'local' present +[0;32m[INFO][0m acl storages all present or pre-positioned: local local-lvm +[0;32m[INFO][0m dnsmasq: not present before Felhom — recorded; uninstall will remove it again if we install it +[0;32m[INFO][0m host DNS (:53): free +[0;32m[INFO][0m hub reachable (https://hub.felhom.eu) +[0;32m[OK][0m customer 'Tester4' exists + passphrase valid +[0;32m[INFO][0m golden: none local — will fetch + verify from Gitea in step 7/8 +byo-test + +[0;34m[STEP][0m BYO disclosure — installing Felhom on a host the operator does NOT own will create: + pveum: roles FelhomAgentBase/FelhomAgentGuest/FelhomAgentStore + user felhom-agent@pve + token felhom-agent@pve!agent + + scoped ACL grants (Base@/, Guest@/pool/felhom, Store@[local local-lvm]) + the 'felhom' pool + agent: service user felhom-agent + /usr/local/bin/felhom-agent (+ .bak-* backups; A/B slots via the guarded self-update) + + /etc/systemd/system/felhom-agent.service (+ felhom-agent-rollback.service + start-limit drop-in) + + /etc/sudoers.d/felhom-agent + state dir /var/lib/felhom-agent + config /etc/felhom-agent/agent.json (0600) + host: /usr/local/sbin/felhom-mkfs-guarded + /usr/local/sbin/felhom-selfupdate-guarded + + /usr/local/sbin/felhom-pbs-apply (PBS-DR apply wrapper — DR capability is baked + on every install; ACTIVATION stays a hub flag, off = zero effect on this host) + + felhom-mgmt-watchdog service+timer+script + /etc/tmpfiles.d/felhom-privsep.conf + + /usr/local/sbin/felhom-priv-apply + the guest-hook snippet under /var/lib/vz/snippets/ + (both from the agent's config bundle) + + the 'sudo' and 'age' packages if absent + install state dir /var/lib/felhom-install + wg: an OUTBOUND WireGuard tunnel to the Felhom hub (wg_tunnel.enabled=true — base + infrastructure like the cloudflared tunnel; hands-free peer registration; the + operator can disable it per-customer hub-side on request) + guest: the provisioned Felhom LXC (vmid 9201, capped 2 cores / 4096 MiB) + its volumes + + the golden vzdump imported onto storage 'local' + reuse: a golden already on 'local' is used only if its sha256 or its controller version + matches the hub's vouched golden; otherwise the vouched one is fetched (a --golden you name is refused) + update: operator-signed self-update authority: felhom-op-1 + NOT touched in byo mode: root@pam (no break-glass), host DNS (:53), OOB sshd. + +Type this host's short hostname (byo-test) to acknowledge the byo install: [0;32m[OK][0m byo install acknowledged for host byo-test +[0;32m[OK][0m pre-flight passed +[0;34m[STEP][0m 2/8 Proxmox API token +[0;32m[OK][0m token minted (secret captured, not logged) +[0;32m[OK][0m scoped ACL applied (Base@/, Guest@/pool/felhom + /vms/990000..990009, Store@[local local-lvm]) +[0;36m[SKIP][0m old broad role FelhomAgent already absent +[0;34m[STEP][0m 3/8 compute volume grows +[0;32m[INFO][0m auto-computed from a 29 GiB thin pool (16 §7: 50/100/130 GiB) +[0;32m[INFO][0m grows: rootfs +0G (->32G), data +26G (->50G, ONE volume) +[0;34m[STEP][0m 4/8 host enrollment (POST /host-enroll) +[0;32m[OK][0m host MINTED (first enroll) +[0;32m[INFO][0m host_id: Tester4-f967d4 (api_key captured, not logged) +[0;36m[SKIP][0m break-glass (step 4b) SKIPPED (byo: the host owner manages break-glass; root@pam untouched, nothing vaulted) +[0;34m[STEP][0m 5/8 agent install (fetch + verify + install) +[0;36m[SKIP][0m apt repo alignment skipped (byo — the owner manages repos) +[1;33m[WARN][0m no git credential in controller.yaml — fetching artifacts ANONYMOUSLY (they are world-readable; sha256 verification unchanged) +[0;32m[INFO][0m manifest: agent v0.164.0 (sha 1b803d8b70f8afbe…), golden v0.331.0 +[0;32m[INFO][0m fetching agent binary v0.164.0 from Gitea … +[0;32m[OK][0m verified sha256 1b803d8b70f8afbe… matches the hub manifest +[0;32m[OK][0m installed /usr/local/bin/felhom-agent (felhom-agent 0.164.0) +[0;32m[INFO][0m installing the 'sudo' package (required for the non-root agent model) … +[0;32m[OK][0m sudo installed (Sudo version 1.9.16p2) +[0;32m[INFO][0m installing the 'age' package (escrow ceremony identity-wrap dependency) … +[0;32m[OK][0m age installed (1.2.1) +[0;32m[OK][0m created service user felhom-agent +[0;32m[OK][0m added felhom-agent to systemd-journal (unprivileged journal read for NAS verify) +[0;32m[OK][0m verified sha256 1d7b54d39d0c1aff… matches the hub manifest + os-apply: BUNDLE START agent=0.164.0 sha=1d7b54d39d0c1aff authority=installer files=32 write=26 same=2 kept=0 skipped=4 + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-mkfs-guarded (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-selfupdate-guarded (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-pbs-apply (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-backup-target-apply (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-vzdump-partial-clean (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-thin-check (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-internal-place (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-crash-guard (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-priv-apply (new) + os-apply: BUNDLE WROTE /var/lib/vz/snippets/felhom-guest-hook.sh (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-shared-parent.sh (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-shared-parent.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard-check.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-crash-guard-check.timer (new) + os-apply: BUNDLE WROTE /etc/felhom/crash-guard.conf (new) + os-apply: BUNDLE WROTE /etc/grub.d/01_felhom_oneshot (new) + os-apply: BUNDLE WROTE /etc/grub.d/42_felhom_oneshot (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent-rollback.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-agent.service.d/felhom-agent-limits.conf (new) + os-apply: BUNDLE WROTE /usr/local/sbin/felhom-mgmt-watchdog (new) + os-apply: BUNDLE WROTE /etc/tmpfiles.d/felhom-privsep.conf (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-mgmt-watchdog.service (new) + os-apply: BUNDLE WROTE /etc/systemd/system/felhom-mgmt-watchdog.timer (new) + os-apply: BUNDLE WROTE /etc/sudoers.d/felhom-agent (new) + os-apply: BUNDLE DONE agent=0.164.0 written=26 same=2 self-check=ok signers-created=False +[0;32m[OK][0m installed every root-owned file from config bundle v0.164.0 (sha 1d7b54d39d0c1aff…; checked, previous copies kept) +[0;36m[SKIP][0m OOB (felhom-sshd) off (byo, or appliance --no-oob) — the bundle skipped its files +[0;34m[STEP][0m 5b/8 internal data place (Belső tárhely) +[0;36m[SKIP][0m byo: the host owner's thin pool is not ours to divide — no internal place +[0;34m[STEP][0m 6/8 agent config + service +[1;33m[WARN][0m backup target: DEGRADED — no eligible second drive, so the whole-system backup stays on the SYSTEM drive. +[1;33m[WARN][0m It protects against file corruption but NOT against a disk failure. Attach a second drive and assign it in the dashboard. +[0;32m[INFO][0m node=byo-test local_api=192.168.0.151:8443 tls_fp=7E:77:41:86:26:92… +[0;32m[OK][0m wrote /etc/felhom-agent/agent.json (0600 felhom-agent) +[0;32m[OK][0m byo config asserts passed (lan_resolver.enable / oob.enabled off; deployment_mode=byo; wg_tunnel intentionally ON — base infrastructure) +[0;32m[OK][0m agent --selftest (read-only) passed +[0;32m[OK][0m felhom-agent service active (non-root felhom-agent reads the config OK) +[0;32m[OK][0m wrote /etc/felhom/os-trust.json + operator-signers (felhom-op-1) — the root-owned slow-lane anchors +[0;34m[STEP][0m 7/8 golden archive +[1;33m[WARN][0m no git credential in controller.yaml — fetching artifacts ANONYMOUSLY (they are world-readable; sha256 verification unchanged) +[0;32m[INFO][0m fetching golden v0.331.0 from Gitea → /var/lib/vz/dump/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst +[0;32m[OK][0m verified sha256 3881de62b0986ccb… matches the hub manifest +[0;32m[OK][0m golden imported + verified: local:backup/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst +[0;34m[STEP][0m 8/8 provision guest 9201 +[0;36m[SKIP][0m pool felhom already exists +=== felhom-agent 0.164.0 selftest=provision (vmid=9201 customer=Tester4 hostname=tester4) === + --- front half: bring-up (provision) local:backup/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst → vmid 9201 --- +time=2026-10-25T17:53:51.729+01:00 level=INFO msg="bring-up: pool membership re-asserted" vmid=9201 pool=felhom + [OK] front half: vmid 9201 up (boot+running) in 1m26s; MAC=BC:24:11:4B:04:4E + --- back half: mint per-guest token + populate bootstrap config mount --- +time=2026-10-25T17:53:56.751+01:00 level=INFO msg="provision: back-half complete" vmid=9201 mount=mp9 guest_path=/etc/felhom-bootstrap endpoint=192.168.0.151:8443 + [OK] back half: bootstrap mount mp9 → /etc/felhom-bootstrap on vmid 9201 (host dir /var/lib/felhom-agent/guests/9201/bootstrap) + local-api endpoint 192.168.0.151:8443 · leaf fp f09a20d4c01686516db562b6acc9aa7e95581d69c2318fccf7894ed772ef4a8e · token: minted (not printed) +=== selftest=provision OK — guest 9201 provisioned + bootstrap-mounted (KEPT) === + next: reboot the guest → the golden's baked controller-bootstrap unit deploys the controller, + which PULLS its controller.yaml from the hub (retrieval passphrase) and merges in this local_api. +[0;32m[OK][0m provision completed +[0;32m[INFO][0m rebooting guest 9201 so the baked controller-bootstrap unit picks up the mount +[0;34m[STEP][0m verify +[0;32m[OK][0m pct status: running +[0;32m[OK][0m onboot: 1 + mp0: local-lvm:vm-9201-disk-1,mp=/var/lib/felhom,backup=1,size=50G + mp8: /mnt/felhom-drives,mp=/mnt/felhom-drives + rootfs: local-lvm:vm-9201-disk-0,size=32G +[0;32m[OK][0m pool: guest 9201 is a member of felhom +[0;32m[OK][0m acl: FelhomAgentBase@/ present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/pool/felhom present (user+token) +[0;32m[OK][0m acl: FelhomAgentStore@/storage/local present (user+token) +[0;32m[OK][0m acl: FelhomAgentStore@/storage/local-lvm present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990000 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990001 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990002 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990003 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990004 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990005 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990006 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990007 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990008 present (user+token) +[0;32m[OK][0m acl: FelhomAgentGuest@/vms/990009 present (user+token) +[0;32m[OK][0m authz signers: 2 (operator-signed self-update armed) +[0;32m[OK][0m controller: Up 5 seconds (healthy) (after ~0s) +[0;32m[INFO][0m controller image: gitea.dooplex.hu/admin/felhom-controller:0.342.0 +[1;33m[WARN][0m cloudflared not visible yet +[0;32m[INFO][0m (confirm in the hub UI that host Tester4-f967d4 reports guest 9201) + +[0;32m[OK][0m Day-0 provision SUCCESS — vmid=9201 host_id=Tester4-f967d4 customer=Tester4 golden=local:backup/vzdump-lxc-9100-2026_10_25-17_52_14.tar.zst +INSTALL_RC=0 +Connection to 192.168.0.151 closed. diff --git a/documentation/audits/release-2026-10-26/homepage-gate-9202.txt b/documentation/audits/release-2026-10-26/homepage-gate-9202.txt new file mode 100644 index 00000000..04134b9c --- /dev/null +++ b/documentation/audits/release-2026-10-26/homepage-gate-9202.txt @@ -0,0 +1,10 @@ +18:05:26 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'} +18:06:01 [1] deployed, controller state=running, pinned={'homepage': 'ghcr.io/gethomepage/homepage:v1.13.2'} +18:06:01 family gate: homepage is family-gated — passed as the household (cookie set) +18:06:01 deployed: True, state=running +18:06:01 STRANGER (text/html): 302 location=https://felhom.enkisfelhom.hu/__family/start?rd=https%3A%2F%2Fhomepage.enkisfelhom.hu%2F +18:06:01 STRANGER (application/json): 401 location= +18:06:01 HOUSEHOLD (dashboard session -> family cookie): 200, body 48349 B, homepage marker=True +18:06:02 [X] stop -> 200 {'ok': True, 'message': 'Stack homepage stop completed'} +18:06:34 [X] remove (with drive data) -> 200 {'ok': True, 'data': {'removed': 'homepage', 'volumes_removed': ['homepage_homepage_config'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'A +18:06:42 [X] after remove: deployed=False leftovers='' diff --git a/documentation/audits/release-2026-10-26/homepage-gate-repoint-drill.txt b/documentation/audits/release-2026-10-26/homepage-gate-repoint-drill.txt new file mode 100644 index 00000000..0f6a9839 --- /dev/null +++ b/documentation/audits/release-2026-10-26/homepage-gate-repoint-drill.txt @@ -0,0 +1,10 @@ +2026/10/25 17:04:28 sync.go:535: [INFO] [sync] Updated plex/docker-compose.yml +2026/10/25 17:04:28 sync.go:535: [INFO] [sync] Updated plex/.felhom.yml +2026/10/25 17:04:28 sync.go:261: [INFO] [sync] catalog moved 227a54498f76 -> 7e3f9543ae72 (0 new, 4 stack dir(s) changed) +2026/10/25 17:04:28 sync.go:299: [INFO] [sync] Catalog sync complete +2026/10/25 17:04:28 sync.go:142: [INFO] [sync] Initial sync: Sablonok frissítve — frissítve: homepage, n8n, opengist, plex + + expect n8n/docker-compose.yml ∋ N8N_DIAGNOSTICS_ENABLED=false: 1 + expect opengist/docker-compose.yml ∋ 256M: 2 + expect homepage/.felhom.yml ∋ family_gate: true: 1 +drill main 7e3f954, box cache 7e3f954: DRILL-CONFIRMED diff --git a/documentation/audits/release-2026-10-26/homepage-gate-repoint-live.txt b/documentation/audits/release-2026-10-26/homepage-gate-repoint-live.txt new file mode 100644 index 00000000..5a9ecc43 --- /dev/null +++ b/documentation/audits/release-2026-10-26/homepage-gate-repoint-live.txt @@ -0,0 +1,6 @@ +26: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git +-rw------- 1 root root 1994 Oct 22 14:47 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml.pre-release1026-drill +mirror main 7e3f9543 +cache HEAD 227a544 +https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git + diff --git a/documentation/audits/release-2026-10-26/redproof/installer-http-code-doubled.txt b/documentation/audits/release-2026-10-26/redproof/installer-http-code-doubled.txt new file mode 100644 index 00000000..33e1ecb1 --- /dev/null +++ b/documentation/audits/release-2026-10-26/redproof/installer-http-code-doubled.txt @@ -0,0 +1,5 @@ +# installer http_code: the new test against the OLD helper (felhom-host-install.sh 1.36.0), 2026-10-25 +FAIL test_http_code_prints_one_status_on_a_refusal -- http_code printed '[401401]' for a 401 (the preflight's case never matches) +PASS test_http_code_prints_the_status_on_success +41 passed, 1 failed +# live, the BYO VM's preflight with installer 1.36.0: 'unexpected hub status 404404' (wrong id) and '401401' (wrong passphrase) — byo/ in this folder diff --git a/documentation/audits/release-2026-10-26/tools/homepage_gate.py b/documentation/audits/release-2026-10-26/tools/homepage_gate.py new file mode 100644 index 00000000..25b26a70 --- /dev/null +++ b/documentation/audits/release-2026-10-26/tools/homepage_gate.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +"""homepage_gate.py — D46 on the drill catalog (9202): Homepage deployed with `family_gate: true` stops a stranger +(no cookie → a redirect to /__family/start) and lets the household in (dashboard session → felhom_famgate → 200). +The same household pass on the same box is the positive control. Removed through the product at the end.""" +import os, re, sys, time +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../catalog-sweep-2026-10-24/tools")) +os.environ.setdefault("TARGET", "9202") +import box_walk as w + +APP = SUB = "homepage" +w.login() +try: + ok = w.deploy(APP, SUB) and w.wait_app(SUB, "/", tries=60, delay=5) + w.say(f"deployed: {ok}, state={w.stack(APP).get('state')}") + for accept in ("text/html", "application/json"): + r = w.sh(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", f"Accept: {accept}", "-H", f"Host: {SUB}.{w.DOMAIN}", f"{w.BASE}/"]) + st = re.match(r"HTTP/\S+ (\d+)", r.stdout or "") + w.say(f"STRANGER ({accept}): {st.group(1) if st else '?'} location={w._loc(r.stdout)[:90]}") + rc, code, body = w.app_curl(SUB, "/") + w.say(f"HOUSEHOLD (dashboard session -> family cookie): {code}, body {len(body)} B, homepage marker={'homepage' in body.lower()}") +finally: + w.remove(APP) diff --git a/documentation/audits/release-2026-10-26/tools/repoint.py b/documentation/audits/release-2026-10-26/tools/repoint.py new file mode 100644 index 00000000..f5907fd7 --- /dev/null +++ b/documentation/audits/release-2026-10-26/tools/repoint.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +"""repoint.py drill|live|status — (release 2026-10-26 copy: TARGET=9202, Homepage family_gate expected) point the box's controller at the drill catalog, or put the saved +controller.yaml back byte for byte. + +The drill repo on Gitea is PRIVATE (R-992) and the box holds no catalog credential, so the drill is MIRRORED onto the +box: a bare git repository in the controller's own data volume, loaded from a git bundle, and +`git.repo_url: file:///opt/docker/felhom-controller/drill-catalog.git` — the method of +`audits/burndown-3-2026-10-17/tools/repoint.py`. The first version of this file set repo_url to the Gitea URL and +believed the repo public; the box's clone then failed („could not read Username", 21:18:11) and the controller ran on +the templates it already had — the first drill pass proved nothing (README, „Drill fixes"). + +`drill` ends with a POSITIVE check, not the absence of an error: the box's catalog cache must be at the drill's main +commit, and every `EXPECT` line must be in the box's copy of that template. Prints repo_url, never a token.""" +import os, subprocess, sys, time +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../catalog-sweep-2026-10-24/tools")) +os.environ.setdefault("TARGET", "9202") +import box_walk as w + +DRILL = "/mnt/5_hdd/felhom.eu/drill/app-catalog-drill" +VOL = "/var/lib/docker/volumes/felhom-controller-data/_data" # guest path of the controller's data volume +CVOL = "/opt/docker/felhom-controller" # the same, inside the controller container +SAVE = f"{VOL}/controller.yaml.pre-release1026-drill" +MIRROR_URL = f"file://{CVOL}/drill-catalog.git" +EXPECT = [("n8n/docker-compose.yml", "N8N_DIAGNOSTICS_ENABLED=false"), ("opengist/docker-compose.yml", "256M"), ("homepage/.felhom.yml", "family_gate: true")] + + +def status(): + print(w.guest(f"""grep -n 'repo_url' {VOL}/controller.yaml; ls -l {SAVE} 2>&1 | tail -1 +docker exec felhom-controller sh -c 'git -C {CVOL}/drill-catalog.git log -1 --format="mirror main %h" main 2>&1; + git -C {CVOL}/data/catalog-cache log -1 --format="cache HEAD %h" 2>&1; git -C {CVOL}/data/catalog-cache remote get-url origin'""")) + + +def mirror(): + b = f"/tmp/drill-rel1026-{os.getpid()}.bundle" + subprocess.run(["git", "-C", DRILL, "bundle", "create", b, "main"], check=True, capture_output=True) + subprocess.run(["scp", "-q", "-o", "StrictHostKeyChecking=accept-new", b, f"{w._T['ssh']}:{b}"], check=True) + subprocess.run(w.ssh_args() + [f"pct push {w.GUEST} {b} {VOL}/{os.path.basename(b)} && rm -f {b}"], check=True) + print(w.guest(f"""set -e +docker exec felhom-controller sh -c 'test -d {CVOL}/drill-catalog.git || git init -q --bare -b main {CVOL}/drill-catalog.git +git -C {CVOL}/drill-catalog.git fetch -q {CVOL}/{os.path.basename(b)} +main:main && rm -f {CVOL}/{os.path.basename(b)} +git -C {CVOL}/drill-catalog.git log -1 --format="mirror main %h" main'""")) + os.remove(b) + + +def restart_sync(): + w.guest("docker restart felhom-controller >/dev/null") + for _ in range(60): + time.sleep(3) + try: + w.login() + break + except SystemExit: + continue + w.sync_rescan() + time.sleep(5) + print(w.guest("docker logs --since 3m felhom-controller 2>&1 | grep -E '\\[sync\\]' | grep -v DEBUG | tail -6 | cut -c1-200")) + + +def drill(): + head = subprocess.run(["git", "-C", DRILL, "rev-parse", "--short=7", "main"], capture_output=True, text=True).stdout.strip() + mirror() + print(w.guest(f"""set -e +test -f {SAVE} || cp -p {VOL}/controller.yaml {SAVE} +sed -i -E 's#^(\\s+repo_url: ).*$#\\1{MIRROR_URL}#' {VOL}/controller.yaml +grep -n 'repo_url' {VOL}/controller.yaml""")) + restart_sync() + cache = w.guest(f"docker exec felhom-controller git -C {CVOL}/data/catalog-cache log -1 --format=%h").strip() + ok = cache.startswith(head) + for f, want in EXPECT: + got = w.guest(f"docker exec felhom-controller grep -c -- '{want}' {CVOL}/data/catalog-cache/templates/{f} || true").strip() + print(f" expect {f} ∋ {want}: {got}") + ok = ok and got not in ("", "0") + print(f"drill main {head}, box cache {cache}: " + ("DRILL-CONFIRMED" if ok else "DRILL-NOT-CONFIRMED")) + sys.exit(0 if ok else 1) + + +def live(): + print(w.guest(f"""set -e +cp -p {SAVE} {VOL}/controller.yaml +cmp {SAVE} {VOL}/controller.yaml && echo RESTORED-IDENTICAL; grep -n 'repo_url' {VOL}/controller.yaml""")) + restart_sync() + status() + + +{"drill": drill, "live": live, "status": status}[sys.argv[1]]() diff --git a/documentation/audits/release-2026-10-26/tools/t1probe.py b/documentation/audits/release-2026-10-26/tools/t1probe.py new file mode 100644 index 00000000..ac8c054c --- /dev/null +++ b/documentation/audits/release-2026-10-26/tools/t1probe.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +"""t1probe.py — controller 0.343.0 on Tester 1 (release brief Part 5): one local unit restore and one kept-data cycle with +a THROWAWAY Tandoor, through the endpoints the pages use. Each restore: the seeded item back, then the undo copy +released after the stable window — read from the controller's own line „ran stably for … — the restore copy is +released" (the positive observable) and the restore-undo folder gone. Removed through the product at the end. + +usage: SC=