Register: R-1022, R-1116, R-977 closed; R-1123..R-1128 filed; R-994 narrowed; duplicate ids fixed

b9c4f73b (the cc-creds session) committed this session's uncommitted register edits together with its own
R-1118..R-1122, so main carried two rows each for R-1118..R-1122. This session's five move to R-1124..R-1128
(R-1123 stays); the CLOSED-ITEMS section for the three closed rows lands here. Evidence:
audits/tester1-limits-filebrowser-2026-10-17/.

Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
admin committed 2026-10-17 11:58:18 +02:00
1 parent b9c4f73bfa
commit fae8064557
31 files changed
+523 -6

No files matched your search

@@ -0,0 +1,12 @@
10:59:59 POST /api/sync -> 200 {'ok': True, 'data': {'ok': True, 'message': 'Sablonok naprakészek — nincs változás'}, 'message': 'Sablonok naprakészek — nincs változás'}
11:00:09 == paperless-ngx before:
compose: command: redis-server --appendonly no| command: redis-server --appendonly no|
container: 2026-10-17T02:33:00.206620166Z ["redis-server","--appendonly","yes"] Up 6 hours (healthy)
dbsize: 2 rdb_last_bgsave_status:ok aof_enabled:1
/data: appendonlydir dump.rdb
11:00:27 POST /api/stacks/paperless-ngx/restart -> 200 {'ok': True, 'data': {'state': 'starting'}, 'message': 'Stack paperless-ngx restart requested — state now: starting'}
11:01:26 == paperless-ngx after (state=running hold=None):
compose: command: redis-server --appendonly no| command: redis-server --appendonly no|
container: 2026-10-17T09:00:09.719659658Z ["redis-server","--appendonly","no"] Up About a minute (healthy)
dbsize: 4 rdb_last_bgsave_status:ok aof_enabled:0
/data: appendonlydir dump.rdb
@@ -0,0 +1,19 @@
deployed apps: [('bookstack', 'running'), ('jellyfin', 'running'), ('paperless-ngx', 'running'), ('plex', 'running'), ('privatebin', 'running'), ('prowlarr', 'running'), ('qbittorrent', 'running'), ('radarr', 'running'), ('sonarr', 'running'), ('transmission', 'running')]
storage paths: 404 {"_raw": "404 page not found\n"}
gitea.dooplex.hu/admin/felhom-controller:0.325.0
gitea.dooplex.hu/admin/felhom-controller:0.325.0 Up 30 minutes (healthy)
24: repo_url: file:///opt/docker/felhom-controller/drill-catalog.git
-rw------- 1 root root 3042 Oct 14 14:04 controller.yaml
-rw------- 1 root root 3044 Oct 4 19:41 controller.yaml.pre-media-2026-10-14
drwxr-xr-x 7 root root 4096 Oct 15 07:59 drill-catalog.git
NAME SIZE MOUNTPOINT
sda 200G
|-sda1 1007K
|-sda2 1G
`-sda3 199G
sdb 50G /mnt/felhom-drives/adatlemez
sdc 100G /mnt/felhom-drives/media_a
sdd 100G /mnt/felhom-drives/media_b
sde 50G /mnt/felhom-drives/media_c
sdf 20G /mnt/felhom-drives/media_d
@@ -0,0 +1,35 @@
== qm config 341 (before) 2026-10-17T08:50:52Z
bios: ovmf
boot: order=scsi0
cores: 4
cpu: host
efidisk0: nvme-scratch:341/vm-341-disk-0.raw,efitype=4m,pre-enrolled-keys=0,size=528K
machine: q35
memory: 8192
meta: creation-qemu=11.0.0,ctime=1791141969
name: night1004-tester1
net0: virtio=BC:24:11:AC:E3:F9,bridge=vmbr0
onboot: 1
ostype: l26
scsi0: nvme-scratch:341/vm-341-disk-1.raw,size=200G
scsi1: nvme-scratch:341/vm-341-disk-2.raw,size=50G
scsi2: nvme-scratch:341/vm-341-disk-3.raw,backup=0,size=100G
scsi3: nvme-scratch:341/vm-341-disk-4.raw,backup=0,size=100G
scsi4: nvme-scratch:341/vm-341-disk-5.raw,backup=0,size=50G
scsi5: nvme-scratch:341/vm-341-disk-6.raw,backup=0,size=20G
scsihw: virtio-scsi-single
smbios1: uuid=451c8d94-abf2-46e4-a278-b579a9f315b5
vga: std
vmgenid: acdf89db-a810-445c-9d88-7bccd688d3c1
== pvesm list nvme-scratch (before)
Volid Format Type Size VMID
nvme-scratch:341/vm-341-disk-0.raw raw images 540672 341
nvme-scratch:341/vm-341-disk-1.raw raw images 214748364800 341
nvme-scratch:341/vm-341-disk-2.raw raw images 53687091200 341
nvme-scratch:341/vm-341-disk-3.raw raw images 107374182400 341
nvme-scratch:341/vm-341-disk-4.raw raw images 107374182400 341
nvme-scratch:341/vm-341-disk-5.raw raw images 53687091200 341
nvme-scratch:341/vm-341-disk-6.raw raw images 21474836480 341
nvme-scratch:9202/vm-9202-disk-2.raw raw rootdir 34359738368 9202
nvme-scratch:9202/vm-9202-disk-3.raw raw rootdir 75161927680 9202
nvme-scratch:9401/vm-9401-disk-0.raw raw rootdir 64424509440 9401
@@ -0,0 +1,5 @@
--- saved
+++ current
@@ -24 +24 @@
- repo_url (repo_url value: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git)
+ repo_url (repo_url value: file:///opt/docker/felhom-controller/drill-catalog.git)
@@ -0,0 +1,22 @@
RESTORED-IDENTICAL
24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
2026/10/17 08:57:35 [INFO] [sync] Updated vikunja/.felhom.yml
2026/10/17 08:57:35 [INFO] [sync] Updated wanderer/.felhom.yml
2026/10/17 08:57:35 [INFO] [sync] Updated wger/.felhom.yml
2026/10/17 08:57:35 [INFO] [sync] Updated wishlist/.felhom.yml
2026/10/17 08:57:35 [INFO] [sync] Updated zipline/.felhom.yml
2026/10/17 08:57:35 [INFO] [sync] catalog moved 6589376258d9 -> 5d9450b0660a (0 new, 64 stack dir(s) changed)
2026/10/17 08:57:35 [INFO] [sync] Catalog sync complete
2026/10/17 08:57:35 [INFO] [sync] Initial sync: Sablonok frissítve — frissítve: actualbudget, adventurelog, audiobookshelf, bentopdf, bookstack, calcom, calibre-web, claper, code-server, crafty-controller, dawarich, docmost, ghost, gitea, glance, gokapi, grafana, gramps-web, grimmory, grocy, home-assistant, homebox, homepage, immich, jellyfin, karakeep, kimai, komga, lubelogger, mealie, metube, n8n, navidrome, nextcloud, nzbget, onlyoffice, opengist, outline, paperless-ngx, papra, plant-it, plex, privatebin, prowlarr, qbittorrent, radarr, radicale, rallly, recipe-importer, romm, sabnzbd, seerr, sonarr, sparkyfitness, tandoor, termix, transmission, uptime-kuma, vaultwarden, vikunja, wanderer, wger, wishlist, zipline
24: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
25: sync_interval: 15m
-rw------- 1 root root 3044 Oct 4 19:41 /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml.pre-media-2026-10-14
mirror main 65893762 DRILL media build: the seven media templates = live + the media_library marker (per-drive binds by the controller, no literal drive paths); Plex: no code at install, accept-JSON probe, ADVERTISE_IP; Transmission incomplete folder off at start — drill catalog only (Tester 1 proof, Part G)
cache HEAD 5d9450b Redis snapshots, not append-only, on five apps (R-1096); gate redis-persistence
https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
11M /var/lib/docker/volumes/felhom-controller-data/_data/drill-catalog.git
ls: cannot access '/var/lib/docker/volumes/felhom-controller-data/_data/drill-catalog.git': No such file or directory
no-drill-left
@@ -0,0 +1,16 @@
== inside Tester 1: clean unmount of the four test mounts 2026-10-17T08:58:51Z
stopped mnt-media_a.mount
stopped mnt-media_b.mount
stopped mnt-media_c.mount
stopped mnt-media_d.mount
no /mnt/media_* mounted
== demo-hp: qm set 341 --delete scsi2,scsi3,scsi4,scsi5
update VM 341: -delete scsi2,scsi3,scsi4,scsi5
rc=0
scsi0: nvme-scratch:341/vm-341-disk-1.raw,size=200G
scsi1: nvme-scratch:341/vm-341-disk-2.raw,size=50G
scsihw: virtio-scsi-single
unused0: nvme-scratch:341/vm-341-disk-3.raw
unused1: nvme-scratch:341/vm-341-disk-4.raw
unused2: nvme-scratch:341/vm-341-disk-5.raw
unused3: nvme-scratch:341/vm-341-disk-6.raw
@@ -0,0 +1,56 @@
pvesm free nvme-scratch:341/vm-341-disk-3.raw
Removed volume 'nvme-scratch:341/vm-341-disk-3.raw'
rc=0
pvesm free nvme-scratch:341/vm-341-disk-4.raw
Removed volume 'nvme-scratch:341/vm-341-disk-4.raw'
rc=0
pvesm free nvme-scratch:341/vm-341-disk-5.raw
Removed volume 'nvme-scratch:341/vm-341-disk-5.raw'
rc=0
pvesm free nvme-scratch:341/vm-341-disk-6.raw
Removed volume 'nvme-scratch:341/vm-341-disk-6.raw'
rc=0
== qm config 341 (after free)
bios: ovmf
boot: order=scsi0
cores: 4
cpu: host
efidisk0: nvme-scratch:341/vm-341-disk-0.raw,efitype=4m,pre-enrolled-keys=0,size=528K
machine: q35
memory: 8192
meta: creation-qemu=11.0.0,ctime=1791141969
name: night1004-tester1
net0: virtio=BC:24:11:AC:E3:F9,bridge=vmbr0
onboot: 1
ostype: l26
scsi0: nvme-scratch:341/vm-341-disk-1.raw,size=200G
scsi1: nvme-scratch:341/vm-341-disk-2.raw,size=50G
scsihw: virtio-scsi-single
smbios1: uuid=451c8d94-abf2-46e4-a278-b579a9f315b5
unused0: nvme-scratch:341/vm-341-disk-3.raw
unused1: nvme-scratch:341/vm-341-disk-4.raw
unused2: nvme-scratch:341/vm-341-disk-5.raw
unused3: nvme-scratch:341/vm-341-disk-6.raw
vga: std
vmgenid: acdf89db-a810-445c-9d88-7bccd688d3c1
== pvesm list nvme-scratch (after)
Volid Format Type Size VMID
nvme-scratch:341/vm-341-disk-0.raw raw images 540672 341
nvme-scratch:341/vm-341-disk-1.raw raw images 214748364800 341
nvme-scratch:341/vm-341-disk-2.raw raw images 53687091200 341
nvme-scratch:9202/vm-9202-disk-2.raw raw rootdir 34359738368 9202
nvme-scratch:9202/vm-9202-disk-3.raw raw rootdir 75161927680 9202
nvme-scratch:9401/vm-9401-disk-0.raw raw rootdir 64424509440 9401
update VM 341: -delete unused0,unused1,unused2,unused3
disk image '/mnt/hdd_1/images/341/vm-341-disk-3.raw' does not exist
disk image '/mnt/hdd_1/images/341/vm-341-disk-4.raw' does not exist
disk image '/mnt/hdd_1/images/341/vm-341-disk-5.raw' does not exist
disk image '/mnt/hdd_1/images/341/vm-341-disk-6.raw' does not exist
rc=0
== qm config 341 (final)
efidisk0: nvme-scratch:341/vm-341-disk-0.raw,efitype=4m,pre-enrolled-keys=0,size=528K
memory: 8192
scsi0: nvme-scratch:341/vm-341-disk-1.raw,size=200G
scsi1: nvme-scratch:341/vm-341-disk-2.raw,size=50G
scsihw: virtio-scsi-single
status: running
@@ -0,0 +1,38 @@
NAME SIZE SERIAL MOUNTPOINTS
sda 200G drive-scsi0
|-sda1 1007K
|-sda2 1G /boot/efi
`-sda3 199G
|-pve-swap 7.7G [SWAP]
|-pve-root 59.8G /mnt/felhom-drives
| /
|-pve-data_tmeta 1.2G
| `-pve-data-tpool 113.2G
| |-pve-data 113.2G
| |-pve-vm--9201--disk--0 32G
| `-pve-vm--9201--disk--1 70G
`-pve-data_tdata 113.2G
`-pve-data-tpool 113.2G
|-pve-data 113.2G
|-pve-vm--9201--disk--0 32G
`-pve-vm--9201--disk--1 70G
sdb 50G drive-scsi1 /mnt/felhom-drives/adatlemez
/mnt/adatlemez
sdc 100G drive-scsi2 /mnt/media_a
sdd 100G drive-scsi3 /mnt/media_b
sde 50G drive-scsi4 /mnt/media_c
sdf 20G drive-scsi5 /mnt/media_d
/mnt/media_c /dev/sde
/mnt/media_a /dev/sdc
/mnt/media_d /dev/sdf
/mnt/adatlemez /dev/sdb
/mnt/media_b /dev/sdd
/mnt/felhom-drives /dev/mapper/pve-root[/mnt/felhom-drives]
/mnt/felhom-drives/adatlemez /dev/sdb[/felhom-data]
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
felhom-pbs pbs active 0 0 0 0.00%
local dir active 61429556 19311648 38965012 31.44%
local-lvm lvmthin active 118673408 15273267 103400140 12.87%
mp0: local-lvm:vm-9201-disk-1,mp=/var/lib/felhom,backup=1,size=70G
mp8: /mnt/felhom-drives,mp=/mnt/felhom-drives
mp9: /var/lib/felhom-agent/guests/9201/bootstrap,mp=/etc/felhom-bootstrap,ro=1
@@ -0,0 +1 @@
6723057 DRILL: tree = live main 5d9450b — R-1022 teardown; no box follows the drill (2026-10-17)
@@ -0,0 +1,4 @@
hp guest 9201: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
hp guest 9202: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
felhom-pve guest 9201: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
-J hp root@192.168.0.154 guest 9201: repo_url: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git
@@ -0,0 +1,10 @@
== guest 9201
containers: 10 not healthy/running: none
bookstack bookstack-db cloudflared felhom-controller filebrowser paperless-postgres paperless-redis paperless-webserver privatebin traefik
gitea.dooplex.hu/admin/felhom-controller:0.325.0
== host: failed units, agent warnings since the detach
Oct 17 10:58:56 felhom felhom-agent[1278]: time=2026-10-17T10:58:56.627+02:00 level=WARN msg="storage: watchdog detected target state change" target=4ebfd36d-87d3-4b63-839e-a5a710fc799a from=attached to=disconnected
Oct 17 10:58:56 felhom felhom-agent[1278]: time=2026-10-17T10:58:56.627+02:00 level=WARN msg="storage: watchdog detected target state change" target=e15652d5-0aa7-4eb8-93a1-afb2839d527c from=attached to=disconnected
Oct 17 10:58:56 felhom felhom-agent[1278]: time=2026-10-17T10:58:56.627+02:00 level=WARN msg="storage: watchdog detected target state change" target=86f33f9c-1022-43d8-95eb-f9a6ec9eb923 from=attached to=disconnected
Oct 17 10:58:56 felhom felhom-agent[1278]: time=2026-10-17T10:58:56.627+02:00 level=WARN msg="storage: watchdog detected target state change" target=8a31a462-ff15-4be2-9aeb-9620b99c7f77 from=attached to=disconnected
dashboard /login: 200
@@ -0,0 +1,54 @@
10:52:02 deployed apps: ['bookstack', 'jellyfin', 'paperless-ngx', 'plex', 'privatebin', 'prowlarr', 'qbittorrent', 'radarr', 'sonarr', 'transmission']
10:52:06 gitea.dooplex.hu/admin/felhom-controller:0.325.0
24: repo_url: file:///opt/docker/felhom-controller/drill-catalog.git
/mnt/felhom-drives
/mnt/felhom-drives
/mnt/felhom-drives/media_a
/mnt/felhom-drives/media_a
/mnt/felhom-drives/adatlemez
/mnt/felhom-drives/adatlemez
/mnt/felhom-drives/media_c
/mnt/felhom-drives/media_c
/mnt/felhom-drives/media_d
/mnt/felhom-drives/media_d
/mnt/felhom-drives/media_b
/mnt/felhom-drives/media_b
storage paths: [('/mnt/felhom-drives/adatlemez', 'live'), ('/mnt/felhom-drives/media_a', 'live'), ('/mnt/felhom-drives/media_b', 'live'), ('/mnt/felhom-drives/media_c', 'live'), ('/mnt/felhom-drives/media_d', 'live')]
10:52:46 sonarr: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "sonarr", "volumes_removed": ["sonarr_sonarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/media_a/userdata/media (30G)"], "verified": true}, "message": "Stack sonarr remove
10:53:24 radarr: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "radarr", "volumes_removed": ["radarr_radarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/media_a/userdata/media (30G)"], "verified": true}, "message": "Stack radarr remove
10:53:58 qbittorrent: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "qbittorrent", "volumes_removed": ["qbittorrent_qbittorrent_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/media_a/userdata/media/torrents (19G)"], "verified": true}, "messag
10:54:34 transmission: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "transmission", "volumes_removed": ["transmission_transmission_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/media_a/userdata/media/transmission (12G)", "/mnt/felhom-drives/
10:55:15 plex: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "plex", "volumes_removed": ["plex_plex_config", "plex_plex_transcode"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/media_a/userdata/media (30G)"], "verified": true}, "message": "St
10:55:48 jellyfin: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "jellyfin", "volumes_removed": ["jellyfin_jellyfin_cache", "jellyfin_jellyfin_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": ["/mnt/felhom-drives/media_a/userdata/media (30G)"], "verified": true}
10:56:26 prowlarr: stop -> 200; remove (keep data, keep backups) -> 200 {"ok": true, "data": {"removed": "prowlarr", "volumes_removed": ["prowlarr_prowlarr_config"], "hdd_paths_removed": [], "hdd_paths_preserved": [], "userdata_kept": [], "verified": true}, "message": "Stack prowlarr removed"}
10:56:26 deployed apps: ['bookstack', 'paperless-ngx', 'privatebin']
10:56:30 gitea.dooplex.hu/admin/felhom-controller:0.325.0
24: repo_url: file:///opt/docker/felhom-controller/drill-catalog.git
/mnt/felhom-drives
/mnt/felhom-drives
/mnt/felhom-drives/media_a
/mnt/felhom-drives/media_a
/mnt/felhom-drives/adatlemez
/mnt/felhom-drives/adatlemez
/mnt/felhom-drives/media_c
/mnt/felhom-drives/media_c
/mnt/felhom-drives/media_d
/mnt/felhom-drives/media_d
/mnt/felhom-drives/media_b
/mnt/felhom-drives/media_b
storage paths: [('/mnt/felhom-drives/adatlemez', 'live'), ('/mnt/felhom-drives/media_a', 'live'), ('/mnt/felhom-drives/media_b', 'live'), ('/mnt/felhom-drives/media_c', 'live'), ('/mnt/felhom-drives/media_d', 'live')]
10:56:38 decommission media_a -> 200 {"data": {"decommissioned": true, "stopped_apps": null, "where": "/mnt/felhom-drives/media_a"}, "ok": true}
10:56:46 decommission media_b -> 200 {"data": {"decommissioned": true, "stopped_apps": null, "where": "/mnt/felhom-drives/media_b"}, "ok": true}
10:56:54 decommission media_c -> 200 {"data": {"decommissioned": true, "stopped_apps": null, "where": "/mnt/felhom-drives/media_c"}, "ok": true}
10:57:01 decommission media_d -> 200 {"data": {"decommissioned": true, "stopped_apps": null, "where": "/mnt/felhom-drives/media_d"}, "ok": true}
10:57:06 deployed apps: ['bookstack', 'paperless-ngx', 'privatebin']
10:57:10 gitea.dooplex.hu/admin/felhom-controller:0.325.0
24: repo_url: file:///opt/docker/felhom-controller/drill-catalog.git
/mnt/felhom-drives
/mnt/felhom-drives
/mnt/felhom-drives/adatlemez
/mnt/felhom-drives/adatlemez
storage paths: [('/mnt/felhom-drives/adatlemez', 'live'), ('/mnt/felhom-drives/media_a', 'decommissioned'), ('/mnt/felhom-drives/media_b', 'decommissioned'), ('/mnt/felhom-drives/media_c', 'decommissioned'), ('/mnt/felhom-drives/media_d', 'decommissioned')]
@@ -0,0 +1,3 @@
--- FAIL: TestFileBrowserAdmin_R977_DefaultBackOnANewRunIsReplaced (0.00s)
filebrowser_password_test.go:183: the default login came back on a new run and was left
FAIL
@@ -0,0 +1 @@
--- FAIL: TestFileBrowserAdmin_R977_NewRunIsWaitedForInTheSameTick (0.00s)
@@ -0,0 +1,2 @@
REFUSED: docmost: .felhom.yml mem_limit "896M" is not the sum of the compose limits 768+256+128=1152M
mem-limit-sum: 1 of 65 template(s) refused — set .felhom.yml resources.mem_limit to the sum of the compose limits (and show the arithmetic in a comment, like paperless-ngx)
@@ -0,0 +1,11 @@
POST /api/sync -> 429
before: memory: 512M
/docmost 536870912
restart -> 200
after: /docmost 536870912 healthy
/docmost-postgres 268435456 healthy
/docmost-redis 134217728 healthy state: running
POST /api/sync -> 200 {'ok': True, 'data': {'ok': True, 'updated': ['docmost', 'grafana', 'romm', 'tandoor', 'termix', 'uptime-kuma'], 'messag
applied: memory: 768M
restart -> 200
after: /docmost 805306368 healthy state: running
@@ -0,0 +1,31 @@
R-1119 — proposed mem_request per app (typical use from sizing-2026-10-13 catalog-check.json, rounded up:
under 100 MB to 10, under 500 MB to 50, else to 100). NOT applied — operator: limits now, requests wait.
app now typical new source
adventurelog 100MB 361MB 400MB telemetry
bookstack 150MB 159MB 200MB telemetry
calcom 200MB 800MB 800MB onboarding
claper 100MB 248MB 250MB onboarding
docmost 200MB 415MB 450MB telemetry
grafana 100MB 220MB 250MB onboarding
home-assistant 256MB 318MB 350MB onboarding
homepage 50MB 82MB 90MB measured
kimai 100MB 163MB 200MB telemetry
komga 200MB 442MB 450MB onboarding
mealie 200MB 273MB 300MB onboarding
nextcloud 256MB 314MB 350MB onboarding
outline 200MB 282MB 300MB onboarding
paperless-ngx 500MB 568MB 600MB telemetry
papra 256MB 266MB 300MB onboarding
privatebin 30MB 40MB 40MB telemetry
recipe-importer 30MB 63MB 70MB measured
romm 300MB 528MB 600MB telemetry
seerr 100MB 166MB 200MB measured
tandoor 512MB 868MB 900MB onboarding
termix 30MB 102MB 150MB measured
uptime-kuma 50MB 103MB 150MB onboarding
zipline 100MB 196MB 200MB onboarding
Effect on the smallest supported box (8 GB: guest 4,096 MiB, reserved 384 → 3,712 MB usable; stacks/deploy.go:1549):
household set (immich, jellyfin, nextcloud, home-assistant, vaultwarden, paperless-ngx): 3,622 MB now → 3,910 MB
whole catalog (65 apps): 15,028 MB now → 18,608 MB; the largest single new request: 900 MB (tandoor) — every app alone fits.
@@ -0,0 +1 @@
default login -> HTTP 401 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T06:54:56.265230678Z
@@ -0,0 +1,12 @@
volume before: 1
removed filebrowser + filebrowser_filebrowser_data at 09:08:51
+1m: default login: (filebrowser not running)
+2m: default login: (filebrowser not running)
+3m: default login: (filebrowser not running)
+4m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+5m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+6m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+7m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+8m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+9m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+10m: default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
@@ -0,0 +1,10 @@
default login -> HTTP 200 | box state: generated 2026-09-15T08:16:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
controller -> 0.326.0-rc.1 at 09:19:34
+30s: default login -> HTTP 401 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+60s: default login -> HTTP 401 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+90s: default login -> HTTP 401 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+120s: default login -> HTTP 401 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+150s: default login -> HTTP 401 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
+180s: default login -> HTTP 401 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:12:31.362830472Z
2026/10/17 09:19:35 filebrowser_password.go:121: [WARN] [infra] filebrowser: admin/admin logs in again on a new FileBrowser run (recorded state "generated") — its data was re-created; replacing it (R-977)
2026/10/17 09:19:35 filebrowser_password.go:178: [INFO] [infra] filebrowser: admin/admin replaced by a generated password (value never logged); verified new=200 admin=401
@@ -0,0 +1,14 @@
volume before: 1
removed filebrowser + filebrowser_filebrowser_data at 09:22:44
+1m: default login: (filebrowser not running)
+2m: default login -> HTTP 200 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+3m: default login -> HTTP 200 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+4m: default login -> HTTP 200 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+5m: default login -> HTTP 200 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+6m: default login -> HTTP 200 | box state: generated 2026-10-17T09:19:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+7m: default login -> HTTP 401 | box state: generated 2026-10-17T09:29:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+8m: default login -> HTTP 401 | box state: generated 2026-10-17T09:29:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+9m: default login -> HTTP 401 | box state: generated 2026-10-17T09:29:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
+10m: default login -> HTTP 401 | box state: generated 2026-10-17T09:29:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
2026/10/17 09:29:35 filebrowser_password.go:121: [WARN] [infra] filebrowser: admin/admin logs in again on a new FileBrowser run (recorded state "generated") — its data was re-created; replacing it (R-977)
2026/10/17 09:29:35 filebrowser_password.go:178: [INFO] [infra] filebrowser: admin/admin replaced by a generated password (value never logged); verified new=200 admin=401
@@ -0,0 +1,16 @@
controller: gitea.dooplex.hu/admin/felhom-controller:0.326.0-rc.2 Up 40 seconds (healthy)
default login -> HTTP 401 | box state: generated 2026-10-17T09:29:35Z | filebrowser started 2026-10-17T09:24:35.302615766Z
volume before: 1
removed filebrowser + filebrowser_filebrowser_data at 09:42:54
+1m: default login: (filebrowser not running)
+2m: default login: (filebrowser not running)
+3m: default login: (filebrowser not running)
+4m: default login: (filebrowser not running)
+5m: default login -> HTTP 401 | box state: generated 2026-10-17T09:47:15Z | filebrowser started 2026-10-17T09:47:15.109818275Z
+6m: default login -> HTTP 401 | box state: generated 2026-10-17T09:47:15Z | filebrowser started 2026-10-17T09:47:15.109818275Z
+7m: default login -> HTTP 401 | box state: generated 2026-10-17T09:47:15Z | filebrowser started 2026-10-17T09:47:15.109818275Z
+8m: default login -> HTTP 401 | box state: generated 2026-10-17T09:47:15Z | filebrowser started 2026-10-17T09:47:15.109818275Z
+9m: default login -> HTTP 401 | box state: generated 2026-10-17T09:47:15Z | filebrowser started 2026-10-17T09:47:15.109818275Z
+10m: default login -> HTTP 401 | box state: generated 2026-10-17T09:47:15Z | filebrowser started 2026-10-17T09:47:15.109818275Z
2026/10/17 09:47:17 filebrowser_password.go:149: [WARN] [infra] filebrowser: admin/admin logs in again on a new FileBrowser run (recorded state "generated") — its data was re-created; replacing it (R-977)
2026/10/17 09:47:17 filebrowser_password.go:206: [INFO] [infra] filebrowser: admin/admin replaced by a generated password (value never logged); verified new=200 admin=401
@@ -0,0 +1,15 @@
=== hp
containers: 24 not healthy/running: none
2026/10/17 09:54:23 updater.go:855: [INFO] [selfupdate] Post-update startup: update successful (0.325.0 → 0.326.0)
filebrowser state: generated
=== felhom-pve
containers: 9 not healthy/running: none
2026/10/17 09:54:12 [INFO] [selfupdate] Post-update startup: update successful (0.325.0 → 0.326.0)
filebrowser state: generated
=== -J hp root@192.168.0.154
containers: 10 not healthy/running: none
2026/10/17 09:54:22 [INFO] [selfupdate] Post-update startup: update successful (0.325.0 → 0.326.0)
filebrowser state: generated
felhom.enkisfelhom.hu /login: 200
felhom.demo-felhom.eu /login: 200
felhom.enkicsifelhom.hu /login: 200
@@ -0,0 +1,4 @@
integrity: ok
('min_controller_version', '0.326.0')
('min_controller_version_declared_min_agent', '0.326.0=0.158.1')
per-box floors still set: []
@@ -0,0 +1,5 @@
global floor 2026-10-17T09:55:58Z: HTTP/1.1 303 See Other Location: /configuration?flash=floor_set
clear per-box tester-1: HTTP/1.1 303 See Other Location: /customers/tester-1?flash=floor_set
clear per-box demo-hp: HTTP/1.1 303 See Other Location: /customers/demo-hp?flash=floor_set
clear per-box demo-felhom: HTTP/1.1 303 See Other Location: /customers/demo-felhom?flash=floor_set
hub /configuration page: 5 0.158.1 3 0.326.0
@@ -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
@@ -0,0 +1,3 @@
per-box tester-1 2026-10-17T09:54:10Z: HTTP/1.1 303 See Other Location: /customers/tester-1?flash=floor_set
per-box demo-hp 2026-10-17T09:54:10Z: HTTP/1.1 303 See Other Location: /customers/demo-hp?flash=floor_set
per-box demo-felhom 2026-10-17T09:54:10Z: HTTP/1.1 303 See Other Location: /customers/demo-felhom?flash=floor_set
@@ -0,0 +1,22 @@
#!/bin/bash
# fbprobe.sh — R-977, run INSIDE a guest. Prints only HTTP status codes and the box's recorded state — never a password.
# The default credential is FileBrowser's public default; it goes to curl on STDIN as a header, never on a command line.
# fbprobe.sh probe the default login's status + the box's recorded state + FileBrowser's start time
# fbprobe.sh recreate remove FileBrowser AND its data volume (what a lost volume looks like), then wait up to
# 10 min for the box itself to bring FileBrowser back (no hand start), probing each minute
set -u
S=/var/lib/docker/volumes/felhom-controller-data/_data/data/settings.json
state() { python3 -c "import json;d=json.load(open('$S'));print(d.get('filebrowser_admin_state'), d.get('filebrowser_admin_decided_at'))"; }
probe() {
ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' filebrowser 2>/dev/null | awk '{print $1}')
if [ -z "$ip" ]; then echo "default login: (filebrowser not running)"; return; fi
code=$(printf 'X-Password: admin\n' | curl -s -o /dev/null -w '%{http_code}' --max-time 10 -X POST -H @- "http://$ip:80/api/auth/login?username=admin")
echo "default login -> HTTP $code | box state: $(state) | filebrowser started $(docker inspect -f '{{.State.StartedAt}}' filebrowser)"
}
case "$1" in
probe) probe ;;
recreate)
echo "volume before: $(docker volume ls -q | grep -c '^filebrowser_filebrowser_data$')"
docker stop filebrowser >/dev/null && docker rm filebrowser >/dev/null && docker volume rm filebrowser_filebrowser_data >/dev/null && echo "removed filebrowser + filebrowser_filebrowser_data at $(date -u +%T)"
for i in $(seq 1 10); do sleep 60; echo "+${i}m: $(probe)"; done ;;
esac
@@ -0,0 +1,54 @@
#!/usr/bin/env python3
"""t1teardown.py — R-1022 on Tester 1 through its dashboard's own endpoints (operator word 2026-10-17 10:47).
Env: SC (0600 dir with .ctlpw = Tester 1's dashboard password), EV, TARGET=tester-1. Steps:
apps stop + remove each test app WITHOUT „delete data" (remove_hdd_data=false, remove_backups=false)
drives decommission media_a..media_d („anyway", type-to-confirm = the mount name), the dashboard's call
state deployed apps, storage paths, the controller image and repo_url (read-only)
"""
import json, os, sys, time
sys.path.insert(0, "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts")
import box_walk as w # noqa: E402
EV = os.environ["EV"]
LOG = open(os.path.join(EV, "t1-console.txt"), "a", buffering=1)
_say = w.say
def say(*a):
_say(*a); LOG.write(time.strftime("%H:%M:%S ") + " ".join(str(x) for x in a) + "\n")
w.say = say
APPS = ["sonarr", "radarr", "qbittorrent", "transmission", "plex", "jellyfin", "prowlarr"]
DRIVES = ["media_a", "media_b", "media_c", "media_d"]
def state():
c, d = w.ctl("GET", "/api/stacks")
dep = sorted(s.get("name") for s in (d.get("data") or []) if s.get("deployed"))
say(f"deployed apps: {dep}")
say(w.guest("cat /etc/felhom-controller-image; grep -n repo_url /var/lib/docker/volumes/felhom-controller-data/_data/controller.yaml; "
"findmnt -rn -o TARGET | grep felhom-drives; python3 -c \"import json;d=json.load(open('/var/lib/docker/volumes/felhom-controller-data/_data/data/settings.json'));"
"print('storage paths:', [(p.get('path'), 'decommissioned' if p.get('decommissioned') else 'live') for p in d.get('storage_paths') or []])\""))
def main():
step = sys.argv[1]
w.login()
if step == "apps":
for a in APPS:
st = w.stack(a)
if not st.get("deployed"):
say(f"{a}: not deployed — skipped"); continue
c1, d1 = w.ctl("POST", f"/api/stacks/{a}/stop")
for _ in range(36):
time.sleep(5)
if w.stack(a).get("state") != "running":
break
c2, d2 = w.ctl("POST", f"/api/stacks/{a}/remove", {"remove_hdd_data": False, "remove_backups": False})
say(f"{a}: stop -> {c1}; remove (keep data, keep backups) -> {c2} {json.dumps(d2, ensure_ascii=False)[:260]}")
state()
elif step == "drives":
for m in DRIVES:
c, d = w.ctl("POST", "/api/storage/decommission", {"where": f"/mnt/felhom-drives/{m}", "mode": "anyway", "mount_name": m})
say(f"decommission {m} -> {c} {json.dumps(d, ensure_ascii=False)[:300]}")
time.sleep(5)
state()
elif step == "state":
state()
main()