D44/D45 = all picks applied (R-1265, R-1266 closed; R-1280–R-1283 opened); R-232 dated check done; release-2026-10-26 evidence: fix A/B live on rc.6, D47 set-aside alarm on rc.7
gates / gates (push) Successful in 13m3s
gates / gates (push) Successful in 13m3s
This commit is contained in:
1 parent
a86ab64f6c
commit
ade357a14e
38 files changed
+4907
-58
No files matched your search
File diff suppressed because it is too large.
Load diff
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"app": "tandoor",
|
||||
"install": true,
|
||||
"seed": true,
|
||||
"backup": {
|
||||
"code": "200",
|
||||
"seconds": 75,
|
||||
"status": "{\"db_dump\": {\"count\": 3, \"duration\": \"1m13.056908559s\", \"last_run\": \"2026-10-25T16:40:16.886510867Z\", \"success\": true}, \"enabled\": true, \"running\": false}"
|
||||
},
|
||||
"reinstall": true,
|
||||
"set_aside_line": "2026/10/25 16:44:21 unit_owner.go:182: [INFO] [backup] tandoor: the recovery unit of an earlier install (c3b2e33d5bc82152; the install ids differ) is SET ASIDE whole → /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z; this install (8c1656d41509efbc) gets its own unit from its first backup (D47)",
|
||||
"set_aside_dirs": [
|
||||
"20261025T164421Z"
|
||||
],
|
||||
"set_aside_byte_identical": true,
|
||||
"restore_page_offers": true,
|
||||
"restore": {
|
||||
"seconds": 95,
|
||||
"status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"tandoor\", \"started_at\": \"2026-10-25T16:44:33.134197317Z\", \"last\": {\"op\": \"restore\", \"stack\": \"tandoor\", \"ok\": true, \"message\": \"A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-25T16:46:07.928283511Z\"}, \"last_recent\": true}"
|
||||
},
|
||||
"state_after_restore": "running",
|
||||
"item_after_restore": true,
|
||||
"db_auth_errors_after_restore": "tandoor: 0\ntandoor-postgres: 0",
|
||||
"controller_lines": "2026/10/25 16:39:24 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0)\n2026/10/25 16:40:16 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0)\n2026/10/25 16:44:21 unit_owner.go:182: [INFO] [backup] tandoor: the recovery unit of an earlier install (c3b2e33d5bc82152; the install ids differ) is SET ASIDE whole → /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z; this install (8c1656d41509efbc) gets its own unit from its \n2026/10/25 16:44:21 recovery_unit.go:297: [INFO] [backup] Recovery unit captured for tandoor → /mnt/sys_drive/felhom-data/backups/primary/tandoor (images=2, secrets-referenced=2, data_keys=0, portable-carried=2/2, withheld=0)\n2026/10/25 16:44:33 kept_copies.go:108: [WARN] [web] Restore of tandoor from a set-aside unit requested (async): /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z from 172.18.0.4:53858\n2026/10/25 16:44:33 unit_owner.go:324: [INFO] [backup] restore tandoor from the set-aside unit /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z (an earlier install, D47)\n2026/10/25 16:44:33 restore_dbcreds.go:114: [INFO] [backup] Restore tandoor: database password(s) [DB_PASSWORD] come from the backup, [] stay as installed (older than the data) — values not logged (R-1106)\n2026/10/25 16:44:33 restore_unit.go:410: [INFO] [backup] Restoring tandoor from recovery unit /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z: images=2, secrets recovered=2/2, data_keys=0\n2026/10/25 16:44:41 offbox_restore_undo.go:169: [INFO] [offbox] tandoor: the live volumes are copied before the restore (3 copied, 0 new from the snapshot) in 4.295s — /mnt/sys_drive/felhom-data/backups/restore-undo/tandoor/20261025T164437Z (R-893)\n2026/10/25 16:44:41 restore_crash_putback.go:89: [INFO] [backup] tandoor: the restore copy is recorded — a power cut from here on puts the app back on start (R-1195)\n2026/10/25 16:44:41 restore.go:225: [INFO] [backup] Restoring Docker volume tandoor_tandoor_media for tandoor\n2026/10/25 16:44:42 restore.go:263: [DEBUG] [backup] Volume tandoor_tandoor_media restored successfully\n2026/10/25 16:44:42 restore.go:225: [INFO] [backup] Restoring Docker volume tandoor_tandoor_postgres_data for tandoor\n2026/10/25 16:44:44 restore.go:263: [DEBUG] [backup] Volume tandoor_tandoor_postgres_data restored successfully\n2026/10/25 16:44:44 restore.go:225: [INFO] [backup] Restoring Docker volume tandoor_tandoor_static for tandoor\n2026/10/25 16:44:47 restore.go:263: [DEBUG] [backup] Volume tandoor_tandoor_static restored successfully\n2026/10/25 16:44:47 restore.go:268: [INFO] [backup] Restored 3 Docker volume(s) for tandoor\n2026/10/25 16:44:47 deploy.go:866: [INFO] [stacks] tandoor: the restored data belongs to install c3b2e33d5bc82152 (was 8c1656d41509efbc) — its backups follow it (D47)\n2026/10/25 16:44:48 restore_db.go:87: [INFO] [backup] Restore tandoor: replaying DB dump into tandoor-postgres (postgres)\n2026/10/25 16:44:52 restore_db.go:97: [INFO] [backup] Restore tandoor: replayed 1 DB dump(s)\n2026/10/25 16:44:56 restore.go:308: [DEBUG] [backup] Post-restore health check: tandoor not yet running, waiting...\n2026/10/25 16:45:01 restore.go:308: [DEBUG] [backup] Post-restore health check: tandoor not yet running, waiting...\n2026/10/25 16:45:07 restore.go:308: [DEBUG] [backup] Post-restore health check: tandoor not yet running, waiting...\n2026/10/25 16:45:12 restore.go:308: [DEBUG] [backup] Post-restore health check: tandoor not yet running, waiting...\n2026/10/25 16:45:17 restore.go:303: [DEBUG] [backup] Post-restore health check: tandoor is running\n2026/10/25 16:46:07 restore_unit.go:591: [INFO] [backup] Restore-from-unit completed: tandoor — 3 volume(s) of 3 listed, 1 database(s) of 1 listed\n",
|
||||
"after_remove": {
|
||||
"containers": "",
|
||||
"volumes": "",
|
||||
"appyaml": "",
|
||||
"appdata": "",
|
||||
"kept": "",
|
||||
"subdomain": "404"
|
||||
},
|
||||
"set_aside_after_remove": "ls: cannot access '/mnt/sys_drive/felhom-data/backups/set-aside/tandoor': No such file or directory"
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
Megőrzött másolatok</h3>
|
||||
<p class="form-hint" style="margin-bottom:.75rem">Ezek a második meghajtón lévő másolatok olyan mappákhoz tartoznak, amelyek most nem érhetők el: a meghajtó nincs csatlakoztatva, már nincs a gépen, vagy a mappa hiányzik. Megőrizzük őket, amíg te el nem távolítod őket.</p>
|
||||
<div class="app-row-list">
|
||||
|
||||
|
||||
<div class="app-row">
|
||||
<img class="app-row-icon" src="/static/assets/-logo.svg" alt="" data-fallback="/static/app-placeholder.svg"
|
||||
onerror="if(!this.dataset.step){this.dataset.step='1';this.src='\/static\/assets\/-logo.png';}else if(this.dataset.fallback&&this.dataset.step==='1'){this.dataset.step='2';this.src=this.dataset.fallback;}else{this.onerror=null;this.style.visibility='hidden';}">
|
||||
<div class="app-row-text">
|
||||
<span class="app-row-name">tandoor</span>
|
||||
<span class="app-row-secondary">a(z) sys_drive meghajtóról megőrzött másolat · egy korábbi telepítés mentése (újratelepítés előtt készült) · 144,3 MB · 2026. 10. 25. 17:44</span>
|
||||
</div>
|
||||
<div class="app-row-actions">
|
||||
|
||||
<form method="POST" action="/backup/kept/restore" style="display:inline">
|
||||
<input type="hidden" name="_csrf" value="[csrf blanked]">
|
||||
<input type="hidden" name="id" value="9a89871d393b93e6">
|
||||
<input type="hidden" name="confirm" value="1">
|
||||
<button type="button" class="btn btn-xs btn-outline"
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
761d5637752bf2695aaff064bcd7973fd5301bff2536e067a762e348a58cfad6 ./compose/.felhom.yml
|
||||
6b80a31a42b9a7fbe879a639944604ebd304fa59987855780a6b093a3d09daaa ./compose/app.yaml
|
||||
851523d2779a6739bd464fd2dc415a191164afcd7aae9d195fbc482a28ec8b25 ./compose/docker-compose.yml
|
||||
f2a36c7337e3593cd9d405707290412e9c874d9ecc8812e69940c97ff12a2ca0 ./data-stamps.json
|
||||
603c168bffcc4e1a88e037195c24324e5e04a0cb39759c020bedc13f4a3cfd0d ./db-dumps/tandoor-postgres.sql
|
||||
e5949ef862580bdcb06f7b5d7f5f9fda852bd33cda2a2d91906ea7c4a7d74d1e ./manifest.json
|
||||
10e76681727084401b338c29b57154e994686da0c2314cdcf5f1a34aa85e7fc2 ./volume-dumps/tandoor_tandoor_media.tar
|
||||
271591a0dd6e8525d7f0dc2ada6a27ac6ddb608fc2840afaf3c686e4a9efd628 ./volume-dumps/tandoor_tandoor_postgres_data.tar
|
||||
ffa924a80b1061ab26b98fd991cec247d109dd133a1c48d2b91d731e95e0a237 ./volume-dumps/tandoor_tandoor_static.tar
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
761d5637752bf2695aaff064bcd7973fd5301bff2536e067a762e348a58cfad6 ./compose/.felhom.yml
|
||||
6b80a31a42b9a7fbe879a639944604ebd304fa59987855780a6b093a3d09daaa ./compose/app.yaml
|
||||
851523d2779a6739bd464fd2dc415a191164afcd7aae9d195fbc482a28ec8b25 ./compose/docker-compose.yml
|
||||
f2a36c7337e3593cd9d405707290412e9c874d9ecc8812e69940c97ff12a2ca0 ./data-stamps.json
|
||||
603c168bffcc4e1a88e037195c24324e5e04a0cb39759c020bedc13f4a3cfd0d ./db-dumps/tandoor-postgres.sql
|
||||
e5949ef862580bdcb06f7b5d7f5f9fda852bd33cda2a2d91906ea7c4a7d74d1e ./manifest.json
|
||||
10e76681727084401b338c29b57154e994686da0c2314cdcf5f1a34aa85e7fc2 ./volume-dumps/tandoor_tandoor_media.tar
|
||||
271591a0dd6e8525d7f0dc2ada6a27ac6ddb608fc2840afaf3c686e4a9efd628 ./volume-dumps/tandoor_tandoor_postgres_data.tar
|
||||
ffa924a80b1061ab26b98fd991cec247d109dd133a1c48d2b91d731e95e0a237 ./volume-dumps/tandoor_tandoor_static.tar
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
761d5637752bf2695aaff064bcd7973fd5301bff2536e067a762e348a58cfad6 ./compose/.felhom.yml
|
||||
691bea19ea9a4b6dec01538da153b239e860a619666472c9226377acc0399ca2 ./compose/app.yaml
|
||||
851523d2779a6739bd464fd2dc415a191164afcd7aae9d195fbc482a28ec8b25 ./compose/docker-compose.yml
|
||||
6c74f6c6dccf492a998f49217223ef03195daf910588376217b0f800830dbcc7 ./manifest.json
|
||||
@@ -0,0 +1,17 @@
|
||||
16:35:08Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
16:38:44Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'}
|
||||
16:38:44Z gate: recipes is gated — passed as the household (cookie set)
|
||||
16:38:58Z tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully.
|
||||
16:39:03Z tandoor: seeded superuser drill4c8145
|
||||
16:39:03Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
16:40:56Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [],
|
||||
16:41:02Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
16:43:43Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'}
|
||||
16:44:23Z set aside: 2026/10/25 16:44:21 unit_owner.go:182: [INFO] [backup] tandoor: the recovery unit of an earlier install (c3b2e33d5bc82152; the install ids differ) is SET ASIDE whole → /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z; this install (8c1656d41509efbc) gets its own unit from its fi
|
||||
16:44:29Z the set-aside unit is install A's unit byte for byte: True (9 files)
|
||||
16:44:33Z [6] POST /backup/kept/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:46:08Z restore status: {"running": false, "op": "restore", "stack": "tandoor", "started_at": "2026-10-25T16:44:33.134197317Z", "last": {"op": "restore", "stack": "tandoor", "ok": true, "message": "A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-25T16:46:07.9282
|
||||
16:46:37Z tandoor: readback of the seeded account found=True
|
||||
16:46:41Z state after restore: running, item: True, db auth errors: tandoor: 0
|
||||
tandoor-postgres: 0
|
||||
16:47:19Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [],
|
||||
@@ -0,0 +1,17 @@
|
||||
16:35:08Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
16:38:44Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'}
|
||||
16:38:44Z gate: recipes is gated — passed as the household (cookie set)
|
||||
16:38:58Z tandoor: createsuperuser :: Running django-vite in production mode (no HMR) Superuser created successfully.
|
||||
16:39:03Z tandoor: seeded superuser drill4c8145
|
||||
16:39:03Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
16:40:56Z [5] stop 200, remove KEEPING data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [],
|
||||
16:41:02Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
16:43:43Z [1] deployed, controller state=running, pinned={'tandoor': 'ghcr.io/tandoorrecipes/recipes:2.6.15', 'tandoor-postgres': 'postgres:17-alpine'}
|
||||
16:44:23Z set aside: 2026/10/25 16:44:21 unit_owner.go:182: [INFO] [backup] tandoor: the recovery unit of an earlier install (c3b2e33d5bc82152; the install ids differ) is SET ASIDE whole → /mnt/sys_drive/felhom-data/backups/set-aside/tandoor/20261025T164421Z; this install (8c1656d41509efbc) gets its own unit from its fi
|
||||
16:44:29Z the set-aside unit is install A's unit byte for byte: True (9 files)
|
||||
16:44:33Z [6] POST /backup/kept/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:46:08Z restore status: {"running": false, "op": "restore", "stack": "tandoor", "started_at": "2026-10-25T16:44:33.134197317Z", "last": {"op": "restore", "stack": "tandoor", "ok": true, "message": "A(z) tandoor: 3 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-25T16:46:07.9282
|
||||
16:46:37Z tandoor: readback of the seeded account found=True
|
||||
16:46:41Z state after restore: running, item: True, db auth errors: tandoor: 0
|
||||
tandoor-postgres: 0
|
||||
16:47:19Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'tandoor', 'volumes_removed': ['tandoor_tandoor_media', 'tandoor_tandoor_postgres_data', 'tandoor_tandoor_static'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [],
|
||||
@@ -0,0 +1,6 @@
|
||||
15:54:21Z preflight 200 {"data": {"agent_supported": true, "escrow_state": "escrowed", "items": [{"id": "pbs_storage_id", "ok": true, "detail": "felhom-pbs"}, {"id": "dr_tier", "ok": true, "detail": "DR tier applied"}, {"id": "age_binary", "ok": true, "detail": "/usr/bin/age"}, {"id": "hub_upload", "ok": true, "detail": "h
|
||||
15:54:21Z start 200 {"data": {"job_id": "escrow-1792943661704480846", "phase": "running"}, "error": "", "ok": true}
|
||||
15:54:25Z status 200 {"phase": "done", "claimable": true, "claimed": false, "restic_pw_sealed": true, "uploaded": false, "awaiting_confirm": null, "key_fingerprint": "82:c6:61:ba:ae:36:47:af:0f:dc:17:0b:0d:5c:5d:63:cd:e7:47:e6:fe:9a:14:fe:66:c1:f0:e6:8f:a1:44:3b", "detail": ""}
|
||||
15:54:25Z claim 200 code received: True confirm_required: True positions: [7, 9]
|
||||
15:54:25Z confirm 200 {"data": {"uploaded": true}, "error": "", "ok": true}
|
||||
15:54:27Z final status 200 {"phase": "done", "claimable": false, "claimed": true, "restic_pw_sealed": true, "uploaded": true, "awaiting_confirm": null, "key_fingerprint": "82:c6:61:ba:ae:36:47:af:0f:dc:17:0b:0d:5c:5d:63:cd:e7:47:e6:fe:9a:14:fe:66:c1:f0:e6:8f:a1:44:3b", "detail": ""}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,23 @@
|
||||
16:11:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
16:11:30Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'}
|
||||
16:11:30Z gate: tasks is gated — passed as the household (cookie set)
|
||||
16:11:31Z vikunja: register http=200
|
||||
16:11:31Z vikunja: create project http=201
|
||||
16:11:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
16:12:52Z [A] the unit now runs: 12: image: busybox:1.36.1 | 13: command: ["sh", "-c", "sleep 20; exit 1"] |
|
||||
16:12:52Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:15:23Z [A] restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T16:12:52.419318838Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T16:15:22.850064238Z", "not_started": true}, "last_r
|
||||
16:15:29Z [A] containers: /vikunja 2026-10-25T16:15:21.005421057Z 7 running | kept undo copy: 20261025T161255Z
|
||||
16:16:33Z [A] 60 s later: /vikunja 2026-10-25T16:16:22.058355517Z 10 running
|
||||
16:16:42Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:17:52Z [A] normal restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T16:16:42.621586165Z", "last": {"op": "restore", "stack": "vikunja", "ok": true, "message": "A(z) vikunja: 2 adatkötet visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-25T16:17:50.752711036Z"}, "last_
|
||||
16:17:56Z [A] the copy right after the success: 20261025T161654Z
|
||||
16:21:06Z vikunja: readback of the seeded project http=200 ok=True
|
||||
16:21:06Z [A] after the window: ls: cannot access '/mnt/sys_drive/felhom-data/backups/restore-undo/vikunja': No such file or directory; item True
|
||||
16:21:06Z [B] export start -> 200 {'ok': True}
|
||||
16:21:14Z [B] the test bundle: 12: image: vikunja/vikunja:0.0.0-felhom-r1279-missing | -rw-r--r-- 1 root root 61278 Oct 25 16:21 /mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab |
|
||||
16:21:21Z [B] import -> 200 {'ok': True}
|
||||
16:21:32Z vikunja: readback of the seeded project http=200 ok=True
|
||||
16:21:32Z [B] import status: {"display_name": "Vikunja", "done": true, "error": "Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.", "job_type": "import", "ok": true, "output_path": "", "output_size": "", "running": false, "stack_name": "vikunja", "steps": [{"label": "Csomag megnyitása", "status": "fail
|
||||
16:21:32Z [B] containers and volumes untouched: True; item True
|
||||
16:22:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt
|
||||
@@ -0,0 +1,23 @@
|
||||
12:08:09Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
12:08:19Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'}
|
||||
12:08:19Z gate: tasks is gated — passed as the household (cookie set)
|
||||
12:08:19Z vikunja: register http=200
|
||||
12:08:20Z vikunja: create project http=201
|
||||
12:08:20Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
12:09:35Z [A] the unit now runs: 12: image: busybox:1.36.1 | 13: command: ["sh", "-c", "sleep 20; exit 1"] |
|
||||
12:09:35Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
12:12:06Z [A] restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T12:09:35.490986371Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T12:12:03.605529263Z", "not_started": true}, "last_r
|
||||
12:12:12Z [A] containers: /vikunja 2026-10-25T12:12:01.767033363Z 7 running | kept undo copy: 20261025T120937Z
|
||||
12:13:16Z [A] 60 s later: /vikunja 2026-10-25T12:13:02.760336787Z 10 running
|
||||
12:13:25Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
12:16:06Z [A] normal restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T12:13:25.792676954Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így m
|
||||
12:16:09Z [A] the copy right after the success: 20261025T121337Z
|
||||
12:22:50Z vikunja: readback of the seeded project http=200 ok=True
|
||||
12:22:50Z [A] after the window: 20261025T121337Z; item True
|
||||
12:22:50Z [B] export start -> 200 {'ok': True}
|
||||
12:22:58Z [B] the test bundle: 12: image: vikunja/vikunja:0.0.0-felhom-r1279-missing | -rw-r--r-- 1 root root 61273 Oct 25 12:22 /mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab |
|
||||
12:23:05Z [B] import -> 200 {'ok': True}
|
||||
12:23:16Z vikunja: readback of the seeded project http=200 ok=True
|
||||
12:23:16Z [B] import status: {"display_name": "Vikunja", "done": true, "error": "Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.", "job_type": "import", "ok": true, "output_path": "", "output_size": "", "running": false, "stack_name": "vikunja", "steps": [{"label": "Csomag megnyitása", "status": "fail
|
||||
12:23:16Z [B] containers and volumes untouched: True; item True
|
||||
12:23:55Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"install": true,
|
||||
"seed": true,
|
||||
"backup": {
|
||||
"code": "200",
|
||||
"seconds": 65,
|
||||
"status": "{\"db_dump\": {\"count\": 2, \"duration\": \"1m0.644813656s\", \"last_run\": \"2026-10-25T12:09:20.752646875Z\", \"success\": true}, \"enabled\": true, \"running\": false}"
|
||||
},
|
||||
"a_restore": {
|
||||
"points": 1,
|
||||
"location": [
|
||||
"location: /backups/restore?flash=flash.restore.started"
|
||||
],
|
||||
"seconds": 151,
|
||||
"status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-25T12:09:35.490986371Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": false, \"message\": \"A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.\", \"finished_at\": \"2026-10-25T12:12:03.605529263Z\", \"not_started\": true}, \"last_recent\": true}",
|
||||
"state": "unhealthy"
|
||||
},
|
||||
"a_containers": "/vikunja 2026-10-25T12:12:01.767033363Z 7 running",
|
||||
"a_undo": "20261025T120937Z",
|
||||
"a_containers_60s_later": "/vikunja 2026-10-25T12:13:02.760336787Z 10 running",
|
||||
"original_back": true,
|
||||
"a_normal_restore": {
|
||||
"points": 1,
|
||||
"location": [
|
||||
"location: /backups/restore?flash=flash.restore.started"
|
||||
],
|
||||
"seconds": 161,
|
||||
"status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-25T12:13:25.792676954Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": false, \"message\": \"A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.\", \"finished_at\": \"2026-10-25T12:16:04.094885331Z\", \"not_started\": true}, \"last_recent\": true}",
|
||||
"state": "running"
|
||||
},
|
||||
"a_undo_right_after": "20261025T121337Z",
|
||||
"a_undo_after_window": "20261025T121337Z",
|
||||
"a_item_after": true,
|
||||
"b_bundle": [
|
||||
"/mnt/felhom-drives/scratch_hdd/exports/vikunja_20261025-122251.fab"
|
||||
],
|
||||
"b_import_status": "{\"display_name\": \"Vikunja\", \"done\": true, \"error\": \"Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.\", \"job_type\": \"import\", \"ok\": true, \"output_path\": \"\", \"output_size\": \"\", \"running\": false, \"stack_name\": \"vikunja\", \"steps\": [{\"label\": \"Csomag megnyitása\", \"status\": \"failed\", \"error\": \"Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.\"}, {\"label\": \"Alkalmazás előkészítése\", \"status\": \"pending\"}, {\"label\": \"Konfiguráció visszaállítása\", \"status\": \"pending\"}, {\"label\": \"Felhasználói adatok visszaállítása\", \"status\": \"pending\"}, {\"label\": \"Adatbázis visszaállítása\", \"status\": \"pending\"}, {\"label\": \"Alkalmazás indítása\", \"status\": \"pending\"}]}",
|
||||
"b_containers_before": "/vikunja 2026-10-25T12:13:39.260893929Z 0 running",
|
||||
"b_containers_after": "/vikunja 2026-10-25T12:13:39.260893929Z 0 running",
|
||||
"b_volumes_before": "vikunja_vikunja_data 2026-10-25T12:13:38Z\nvikunja_vikunja_db 2026-10-25T12:13:38Z",
|
||||
"b_volumes_after": "vikunja_vikunja_data 2026-10-25T12:13:38Z\nvikunja_vikunja_db 2026-10-25T12:13:38Z",
|
||||
"b_untouched": true,
|
||||
"b_item_still_there": true,
|
||||
"controller_lines": "2026/10/25 12:09:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:10:04 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:10:14 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:10:24 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:10:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:11:04 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:11:24 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:11:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:12:03 restore_verdict.go:54: [ERROR] [backup] vikunja: the unit restore put the data back, but the app did not start: stack vikunja did not run stably for 45s (it restarted or turned unhealthy) after restore — NOT reported as a success; the restore copy is kept (/mnt/sys_drive/felhom-data/backups/restor\n2026/10/25 12:12:04 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:12:14 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:12:34 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:12:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:12:54 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:13:14 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:13:34 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 12:16:04 restore_verdict.go:54: [ERROR] [backup] vikunja: the unit restore put the data back, but the app did not start: stack vikunja did not run stably for 45s (it restarted or turned unhealthy) after restore — NOT reported as a success; the restore copy is kept (/mnt/sys_drive/felhom-data/backups/restor\n2026/10/25 12:23:05 handler_export.go:328: [DEBUG] [web] apiImportStart: path=\"/mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab\" hasPassword=<redacted>\n2026/10/25 12:23:05 export.go:166: [DEBUG] [appexport] StartImport: path=/mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab size=59.8 KB encrypted=false\n2026/10/25 12:23:05 handler_export.go:352: [INFO] [web] Import started from /mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab\n2026/10/25 12:23:05 restore.go:223: [INFO] [appexport] Import started for vikunja-r1279-test.fab\n2026/10/25 12:23:05 export.go:166: [DEBUG] [appexport] === IMPORT START: path=/mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab encrypted=false ===\n2026/10/25 12:23:05 restore.go:330: [INFO] Import: opening bundle for vikunja (Vikunja)\n2026/10/25 12:23:06 restore_pull.go:96: [ERROR] [backup] Restore REFUSED for vikunja before anything was touched: the image vikunja/vikunja:0.0.0-felhom-r1279-missing could not be downloaded (the version does not exist any more; after 1s): exit status 1 — Error response from daemon: manifest for vikunja/vikunja:0.0.0\n2026/10/25 12:23:06 restore.go:355: [WARN] Import: REFUSED before anything was touched — an image of vikunja could not be downloaded: Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az Line truncated
|
||||
"after_remove": {
|
||||
"containers": "",
|
||||
"volumes": "",
|
||||
"appyaml": "",
|
||||
"appdata": "",
|
||||
"kept": "",
|
||||
"subdomain": "404"
|
||||
},
|
||||
"cleanup": "ls: cannot access '/mnt/sys_drive/felhom-data/backups/fix-a-test-original/vikunja': No such file or directory\nls: cannot access '/mnt/sys_drive/felhom-data/backups/restore-undo/vikunja': No such file or directory"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
12:08:09Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
12:08:19Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'}
|
||||
12:08:19Z gate: tasks is gated — passed as the household (cookie set)
|
||||
12:08:19Z vikunja: register http=200
|
||||
12:08:20Z vikunja: create project http=201
|
||||
12:08:20Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
12:09:35Z [A] the unit now runs: 12: image: busybox:1.36.1 | 13: command: ["sh", "-c", "sleep 20; exit 1"] |
|
||||
12:09:35Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
12:12:06Z [A] restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T12:09:35.490986371Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T12:12:03.605529263Z", "not_started": true}, "last_r
|
||||
12:12:12Z [A] containers: /vikunja 2026-10-25T12:12:01.767033363Z 7 running | kept undo copy: 20261025T120937Z
|
||||
12:13:16Z [A] 60 s later: /vikunja 2026-10-25T12:13:02.760336787Z 10 running
|
||||
12:13:25Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
12:16:06Z [A] normal restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T12:13:25.792676954Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így m
|
||||
12:16:09Z [A] the copy right after the success: 20261025T121337Z
|
||||
12:22:50Z vikunja: readback of the seeded project http=200 ok=True
|
||||
12:22:50Z [A] after the window: 20261025T121337Z; item True
|
||||
12:22:50Z [B] export start -> 200 {'ok': True}
|
||||
12:22:58Z [B] the test bundle: 12: image: vikunja/vikunja:0.0.0-felhom-r1279-missing | -rw-r--r-- 1 root root 61273 Oct 25 12:22 /mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab |
|
||||
12:23:05Z [B] import -> 200 {'ok': True}
|
||||
12:23:16Z vikunja: readback of the seeded project http=200 ok=True
|
||||
12:23:16Z [B] import status: {"display_name": "Vikunja", "done": true, "error": "Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.", "job_type": "import", "ok": true, "output_path": "", "output_size": "", "running": false, "stack_name": "vikunja", "steps": [{"label": "Csomag megnyitása", "status": "fail
|
||||
12:23:16Z [B] containers and volumes untouched: True; item True
|
||||
12:23:55Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"install": true,
|
||||
"seed": true,
|
||||
"backup": {
|
||||
"code": "200",
|
||||
"seconds": 70,
|
||||
"status": "{\"db_dump\": {\"count\": 2, \"duration\": \"1m6.261101247s\", \"last_run\": \"2026-10-25T16:12:37.692662134Z\", \"success\": true}, \"enabled\": true, \"running\": false}"
|
||||
},
|
||||
"a_restore": {
|
||||
"points": 1,
|
||||
"location": [
|
||||
"location: /backups/restore?flash=flash.restore.started"
|
||||
],
|
||||
"seconds": 151,
|
||||
"status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-25T16:12:52.419318838Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": false, \"message\": \"A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.\", \"finished_at\": \"2026-10-25T16:15:22.850064238Z\", \"not_started\": true}, \"last_recent\": true}",
|
||||
"state": "unhealthy"
|
||||
},
|
||||
"a_containers": "/vikunja 2026-10-25T16:15:21.005421057Z 7 running",
|
||||
"a_undo": "20261025T161255Z",
|
||||
"a_containers_60s_later": "/vikunja 2026-10-25T16:16:22.058355517Z 10 running",
|
||||
"original_back": true,
|
||||
"a_normal_restore": {
|
||||
"points": 1,
|
||||
"location": [
|
||||
"location: /backups/restore?flash=flash.restore.started"
|
||||
],
|
||||
"seconds": 70,
|
||||
"status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-25T16:16:42.621586165Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": true, \"message\": \"A(z) vikunja: 2 adatkötet visszaállítva — az alkalmazás újraindult.\", \"finished_at\": \"2026-10-25T16:17:50.752711036Z\"}, \"last_recent\": true}",
|
||||
"state": "running"
|
||||
},
|
||||
"a_undo_right_after": "20261025T161654Z",
|
||||
"a_undo_after_window": "ls: cannot access '/mnt/sys_drive/felhom-data/backups/restore-undo/vikunja': No such file or directory",
|
||||
"a_item_after": true,
|
||||
"b_bundle": [
|
||||
"/mnt/felhom-drives/scratch_hdd/exports/vikunja_20261025-162107.fab"
|
||||
],
|
||||
"b_import_status": "{\"display_name\": \"Vikunja\", \"done\": true, \"error\": \"Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.\", \"job_type\": \"import\", \"ok\": true, \"output_path\": \"\", \"output_size\": \"\", \"running\": false, \"stack_name\": \"vikunja\", \"steps\": [{\"label\": \"Csomag megnyitása\", \"status\": \"failed\", \"error\": \"Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.\"}, {\"label\": \"Alkalmazás előkészítése\", \"status\": \"pending\"}, {\"label\": \"Konfiguráció visszaállítása\", \"status\": \"pending\"}, {\"label\": \"Felhasználói adatok visszaállítása\", \"status\": \"pending\"}, {\"label\": \"Adatbázis visszaállítása\", \"status\": \"pending\"}, {\"label\": \"Alkalmazás indítása\", \"status\": \"pending\"}]}",
|
||||
"b_containers_before": "/vikunja 2026-10-25T16:16:56.67656Z 0 running",
|
||||
"b_containers_after": "/vikunja 2026-10-25T16:16:56.67656Z 0 running",
|
||||
"b_volumes_before": "vikunja_vikunja_data 2026-10-25T16:16:55Z\nvikunja_vikunja_db 2026-10-25T16:16:55Z",
|
||||
"b_volumes_after": "vikunja_vikunja_data 2026-10-25T16:16:55Z\nvikunja_vikunja_db 2026-10-25T16:16:55Z",
|
||||
"b_untouched": true,
|
||||
"b_item_still_there": true,
|
||||
"controller_lines": "2026/10/25 16:11:31 dbdump.go:149: [DEBUG] DiscoverDatabases: docker ps output: 652806f76d48\tvikunja\tvikunja\tvikunja/vikunja:2.6.0\n2026/10/25 16:13:04 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:13:12 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:13:14 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:13:22 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:13:32 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:13:34 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:13:42 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:13:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:13:52 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:14:02 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:14:04 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:14:12 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:14:14 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:14:22 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:14:32 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:14:34 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:14:42 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:14:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:14:52 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:02 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:04 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:15:12 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:22 restore_verdict.go:54: [ERROR] [backup] vikunja: the unit restore put the data back, but the app did not start: stack vikunja did not run stably for 45s (it restarted or turned unhealthy) after restore — NOT reported as a success; the restore copy is kept (/mnt/sys_drive/felhom-data/backups/restor\n2026/10/25 16:15:22 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:24 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:15:32 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:42 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:44 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info → Get \"http://vikunja:3456/api/v1/info\": dial tcp 172.18.0.7:3456: connect: connection refused\n2026/10/25 16:15:53 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — the stack does not read running\n2026/10/25 16:15:54 healthprobe.go:196: [WARN] Health probe vikunja: API GET :3456/api/v1/info Line truncated
|
||||
"after_remove": {
|
||||
"containers": "",
|
||||
"volumes": "",
|
||||
"appyaml": "",
|
||||
"appdata": "",
|
||||
"kept": "",
|
||||
"subdomain": "404"
|
||||
},
|
||||
"cleanup": "ls: cannot access '/mnt/sys_drive/felhom-data/backups/fix-a-test-original/vikunja': No such file or directory\nls: cannot access '/mnt/sys_drive/felhom-data/backups/restore-undo/vikunja': No such file or directory"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
16:11:20Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
16:11:30Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'}
|
||||
16:11:30Z gate: tasks is gated — passed as the household (cookie set)
|
||||
16:11:31Z vikunja: register http=200
|
||||
16:11:31Z vikunja: create project http=201
|
||||
16:11:31Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
16:12:52Z [A] the unit now runs: 12: image: busybox:1.36.1 | 13: command: ["sh", "-c", "sleep 20; exit 1"] |
|
||||
16:12:52Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:15:23Z [A] restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T16:12:52.419318838Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T16:15:22.850064238Z", "not_started": true}, "last_r
|
||||
16:15:29Z [A] containers: /vikunja 2026-10-25T16:15:21.005421057Z 7 running | kept undo copy: 20261025T161255Z
|
||||
16:16:33Z [A] 60 s later: /vikunja 2026-10-25T16:16:22.058355517Z 10 running
|
||||
16:16:42Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:17:52Z [A] normal restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T16:16:42.621586165Z", "last": {"op": "restore", "stack": "vikunja", "ok": true, "message": "A(z) vikunja: 2 adatkötet visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-25T16:17:50.752711036Z"}, "last_
|
||||
16:17:56Z [A] the copy right after the success: 20261025T161654Z
|
||||
16:21:06Z vikunja: readback of the seeded project http=200 ok=True
|
||||
16:21:06Z [A] after the window: ls: cannot access '/mnt/sys_drive/felhom-data/backups/restore-undo/vikunja': No such file or directory; item True
|
||||
16:21:06Z [B] export start -> 200 {'ok': True}
|
||||
16:21:14Z [B] the test bundle: 12: image: vikunja/vikunja:0.0.0-felhom-r1279-missing | -rw-r--r-- 1 root root 61278 Oct 25 16:21 /mnt/felhom-drives/scratch_hdd/exports/vikunja-r1279-test.fab |
|
||||
16:21:21Z [B] import -> 200 {'ok': True}
|
||||
16:21:32Z vikunja: readback of the seeded project http=200 ok=True
|
||||
16:21:32Z [B] import status: {"display_name": "Vikunja", "done": true, "error": "Ennek a mentésnek a verzióját (vikunja:0.0.0-felhom-r1279-missing) nem lehet letölteni: a készítője már nem kínálja. Az alkalmazáshoz nem nyúltunk. Válassz egy másik mentést.", "job_type": "import", "ok": true, "output_path": "", "output_size": "", "running": false, "stack_name": "vikunja", "steps": [{"label": "Csomag megnyitása", "status": "fail
|
||||
16:21:32Z [B] containers and volumes untouched: True; item True
|
||||
16:22:11Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt
|
||||
@@ -0,0 +1,6 @@
|
||||
# D47 operator-line red-proof: the set-aside never notifies. 2026-10-25T16:15:50Z
|
||||
unit_owner_test.go:320: the operator hears once, with both identities: []
|
||||
--- FAIL: TestD47_ASetAsideTellsTheOperatorOnce (0.00s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/backup 0.011s
|
||||
FAIL
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
15:46:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
15:46:14Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'}
|
||||
15:46:14Z gate: tasks is gated — passed as the household (cookie set)
|
||||
15:46:14Z vikunja: register http=200
|
||||
15:46:14Z vikunja: create project http=201
|
||||
15:46:14Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
15:47:34Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
15:50:05Z restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T15:47:34.995178121Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T15:50:03.904088759Z", "not_started": true}, "last_r
|
||||
15:50:09Z the copy right after: 20261025T154736Z
|
||||
15:58:10Z vikunja: readback of the seeded project http=200 ok=True
|
||||
15:58:10Z the copy after the window: 20261025T154736Z; item True
|
||||
15:58:19Z [7] stop 200, remove with data -> 409 {'ok': False, 'error': 'Az alkalmazáson mentés vagy visszaállítás fut. Várd meg, amíg befejeződik.'}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
15:46:04Z [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
15:46:14Z [1] deployed, controller state=running, pinned={'vikunja': 'vikunja/vikunja:2.6.0'}
|
||||
15:46:14Z gate: tasks is gated — passed as the household (cookie set)
|
||||
15:46:14Z vikunja: register http=200
|
||||
15:46:14Z vikunja: create project http=201
|
||||
15:46:14Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
15:47:34Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
15:50:05Z restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T15:47:34.995178121Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T15:50:03.904088759Z", "not_started": true}, "last_r
|
||||
15:50:09Z the copy right after: 20261025T154736Z
|
||||
15:58:10Z vikunja: readback of the seeded project http=200 ok=True
|
||||
15:58:10Z the copy after the window: 20261025T154736Z; item True
|
||||
15:58:19Z [7] stop 200, remove with data -> 409 {'ok': False, 'error': 'Az alkalmazáson mentés vagy visszaállítás fut. Várd meg, amíg befejeződik.'}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
15:57:59Z [1] vikunja already deployed — reusing
|
||||
15:58:00Z gate: tasks is gated — passed as the household (cookie set)
|
||||
15:58:00Z vikunja: register http=200
|
||||
15:58:00Z vikunja: create project http=201
|
||||
15:58:00Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
15:58:55Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:01:26Z restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T15:58:55.824882192Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T16:01:24.880744612Z", "not_started": true}, "last_r
|
||||
16:01:30Z the copy right after: 20261025T154736Z
|
||||
20261025T155857Z
|
||||
16:09:28Z vikunja: readback of the seeded project http=200 ok=True
|
||||
16:09:28Z the copy after the window: 20261025T154736Z
|
||||
20261025T155857Z; item True
|
||||
16:10:03Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"install": true,
|
||||
"backup": {
|
||||
"code": "200",
|
||||
"seconds": 55,
|
||||
"status": "{\"db_dump\": {\"count\": 2, \"duration\": \"54.787148146s\", \"last_run\": \"2026-10-25T15:58:55.262677837Z\", \"success\": true}, \"enabled\": true, \"running\": false}"
|
||||
},
|
||||
"restore": {
|
||||
"points": 1,
|
||||
"location": [
|
||||
"location: /backups/restore?flash=flash.restore.started"
|
||||
],
|
||||
"seconds": 151,
|
||||
"status": "{\"running\": false, \"op\": \"restore\", \"stack\": \"vikunja\", \"started_at\": \"2026-10-25T15:58:55.824882192Z\", \"last\": {\"op\": \"restore\", \"stack\": \"vikunja\", \"ok\": false, \"message\": \"A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.\", \"finished_at\": \"2026-10-25T16:01:24.880744612Z\", \"not_started\": true}, \"last_recent\": true}",
|
||||
"state": "running"
|
||||
},
|
||||
"copy_right_after": "20261025T154736Z\n20261025T155857Z",
|
||||
"copy_after_window": "20261025T154736Z\n20261025T155857Z",
|
||||
"item": true,
|
||||
"lines": "2026/10/25 15:59:03 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 15:59:13 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 15:59:23 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 15:59:33 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 15:59:43 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 15:59:54 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:00:04 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:00:14 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:00:24 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:00:34 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:00:44 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:00:54 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:01:04 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:01:14 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:01:24 restore_verdict.go:54: [ERROR] [backup] vikunja: the unit restore put the data back, but the app did not start: stack vikunja did not run stably for 45s (it restarted or turned unhealthy) after restore — NOT reported as a success; the res\n2026/10/25 16:01:24 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:01:35 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:01:45 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.State.Health>: map has no entry for key \"\n2026/10/25 16:01:55 restore_verdict.go:172: [DEBUG] [backup] stable-start sample vikunja: not ok — no container sample (0, err docker inspect: exit status 1: template parsing error: template: :1:55: executing \"\" at <.Line truncated
|
||||
"after_remove": {
|
||||
"containers": "",
|
||||
"volumes": "",
|
||||
"appyaml": "",
|
||||
"appdata": "",
|
||||
"kept": "",
|
||||
"subdomain": "404"
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
15:57:59Z [1] vikunja already deployed — reusing
|
||||
15:58:00Z gate: tasks is gated — passed as the household (cookie set)
|
||||
15:58:00Z vikunja: register http=200
|
||||
15:58:00Z vikunja: create project http=201
|
||||
15:58:00Z [4] Mentés most -> 200 {'ok': True, 'message': 'Mentés elindítva'}
|
||||
15:58:55Z [6] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
16:01:26Z restore: {"running": false, "op": "restore", "stack": "vikunja", "started_at": "2026-10-25T15:58:55.824882192Z", "last": {"op": "restore", "stack": "vikunja", "ok": false, "message": "A(z) vikunja: az adatokat visszatöltöttük, de az alkalmazás még nem indult el. Várj pár percet, majd nyisd meg újra. Ha így marad, szólj nekünk.", "finished_at": "2026-10-25T16:01:24.880744612Z", "not_started": true}, "last_r
|
||||
16:01:30Z the copy right after: 20261025T154736Z
|
||||
20261025T155857Z
|
||||
16:09:28Z vikunja: readback of the seeded project http=200 ok=True
|
||||
16:09:28Z the copy after the window: 20261025T154736Z
|
||||
20261025T155857Z; item True
|
||||
16:10:03Z [7] stop 200, remove with data -> 200 {'ok': True, 'data': {'removed': 'vikunja', 'volumes_removed': ['vikunja_vikunja_data', 'vikunja_vikunja_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt
|
||||
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env python3
|
||||
"""escrow_ceremony.py — the recovery-code ceremony on Tester 1 through the wizard's own calls (operator yes,
|
||||
2026-10-25): login → GET /api/escrow/preflight → POST /api/escrow/start (password re-auth) → poll /api/escrow/status →
|
||||
POST /api/escrow/claim (the ONE-SHOT code) → POST /api/escrow/confirm (the two words the agent names). The code is
|
||||
NEVER printed or logged: it goes only into the 0600 file named by argv[1] (the caller hands it to `sec put`, which
|
||||
shreds it). Run through `sec run TESTER1_PASSWORD -- python3 escrow_ceremony.py <codefile>`."""
|
||||
import json, os, re, subprocess, sys, time
|
||||
|
||||
PW = os.environ["TESTER1_PASSWORD"]
|
||||
SSH = ["ssh", "-o", "BatchMode=yes", "-o", "ConnectTimeout=20", "root@192.168.0.154"]
|
||||
HOST = "Host: felhom.enkicsifelhom.hu"
|
||||
|
||||
|
||||
def run(args, inp=None):
|
||||
return subprocess.run(args, input=inp, capture_output=True, text=True, timeout=300)
|
||||
|
||||
|
||||
def base():
|
||||
r = run(SSH + ["pct exec 9201 -- ip -4 -o addr show eth0"])
|
||||
return "https://" + re.search(r"inet (\d+\.\d+\.\d+\.\d+)/", r.stdout).group(1)
|
||||
|
||||
|
||||
def say(*a):
|
||||
print(time.strftime("%H:%M:%SZ", time.gmtime()), *a, flush=True)
|
||||
|
||||
|
||||
B = base()
|
||||
h = run(["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", HOST, "-X", "POST", "--data-urlencode", "password@-", f"{B}/login"], inp=PW).stdout
|
||||
sess = re.search(r"felhom_session=[A-Za-z0-9._-]+", h).group(0)
|
||||
page = run(["curl", "-sk", "-L", "-H", HOST, "-H", f"Cookie: {sess}", f"{B}/backup/escrow"]).stdout
|
||||
csrf = re.search(r'<meta name="csrf-token" content="([^"]+)"', page).group(1)
|
||||
|
||||
|
||||
def api(method, path, form=None, js=None):
|
||||
a = ["curl", "-sk", "-H", HOST, "-H", f"Cookie: {sess}", "-H", f"X-CSRF-Token: {csrf}", "-X", method, "-w", "\n%{http_code}"]
|
||||
inp = None
|
||||
if form is not None:
|
||||
a += ["--data-urlencode", f"_csrf={csrf}", "--data-urlencode", "password@-"]
|
||||
inp = form
|
||||
if js is not None:
|
||||
a += ["-H", "Content-Type: application/json", "--data-binary", "@-"]
|
||||
inp = json.dumps(js)
|
||||
out = run(a + [f"{B}{path}"], inp=inp).stdout
|
||||
body, _, code = out.rpartition("\n")
|
||||
try:
|
||||
return code, json.loads(body)
|
||||
except ValueError:
|
||||
return code, {"raw": body[:200]}
|
||||
|
||||
|
||||
c, pre = api("GET", "/api/escrow/preflight")
|
||||
say("preflight", c, json.dumps(pre, ensure_ascii=False)[:300])
|
||||
c, st = api("POST", "/api/escrow/start", form=PW)
|
||||
say("start", c, json.dumps(st, ensure_ascii=False)[:300])
|
||||
if c != "200":
|
||||
sys.exit(1)
|
||||
KEEP = ("phase", "claimable", "claimed", "restic_pw_sealed", "uploaded", "awaiting_confirm", "key_fingerprint", "detail")
|
||||
for _ in range(120):
|
||||
time.sleep(2)
|
||||
c, s = api("GET", "/api/escrow/status")
|
||||
dd = s.get("data") or {}
|
||||
if dd.get("claimable") is True or dd.get("phase") in ("failed", "unclaimed_void"):
|
||||
break
|
||||
say("status", c, json.dumps({k: dd.get(k) for k in KEEP}, ensure_ascii=False))
|
||||
c, cl = api("POST", "/api/escrow/claim")
|
||||
d = cl.get("data") or {}
|
||||
code = d.get("recovery_code", "")
|
||||
say("claim", c, "code received:", bool(code), "confirm_required:", d.get("confirm_required"), "positions:", d.get("verify_positions"))
|
||||
if not code:
|
||||
sys.exit(2)
|
||||
fd = os.open(sys.argv[1], os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)
|
||||
os.write(fd, code.encode())
|
||||
os.close(fd)
|
||||
words = code.split("-")
|
||||
if d.get("confirm_required"):
|
||||
p = d["verify_positions"]
|
||||
c, cf = api("POST", "/api/escrow/confirm", js={"words": [words[p[0] - 1], words[p[1] - 1]]})
|
||||
say("confirm", c, json.dumps(cf, ensure_ascii=False)[:300])
|
||||
code, words = "", []
|
||||
for _ in range(30):
|
||||
time.sleep(2)
|
||||
c, s = api("GET", "/api/escrow/status")
|
||||
dd = s.get("data") or {}
|
||||
if dd.get("uploaded") is True or dd.get("phase") in ("failed", "unconfirmed_void"):
|
||||
break
|
||||
say("final status", c, json.dumps({k: dd.get(k) for k in KEEP}, ensure_ascii=False))
|
||||
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
"""stableprobe.py — fix A, the healthy half: a normal unit restore of a healthy throwaway app → the page says success,
|
||||
the undo copy is there right after, and gone after the 3-minute stable window. The controller's DEBUG lines say why
|
||||
any sample was not ok. usage: SC=… SWEEP_EV=… TARGET=9202 python3 stableprobe.py <app>"""
|
||||
import json, os, sys, time
|
||||
|
||||
TOOLS = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../catalog-sweep-2026-10-24/tools")
|
||||
sys.path.insert(0, TOOLS)
|
||||
import sweep as sw # noqa: E402
|
||||
|
||||
w, fxm = sw.w, sw.fxm
|
||||
|
||||
|
||||
def main(app):
|
||||
d = os.path.join(sw.EV, "stableprobe", app)
|
||||
os.makedirs(d, exist_ok=True)
|
||||
log = open(os.path.join(d, "walk.log"), "a")
|
||||
|
||||
def say(*a):
|
||||
line = time.strftime("%H:%M:%SZ", time.gmtime()) + " " + " ".join(str(x) for x in a)
|
||||
print(line, flush=True)
|
||||
log.write(sw.scrub(line) + "\n")
|
||||
log.flush()
|
||||
|
||||
w.say = say
|
||||
fx = fxm.FIXTURES[app]
|
||||
sub = getattr(fx, "sub", app)
|
||||
undo = f"/mnt/sys_drive/felhom-data/backups/restore-undo/{app}"
|
||||
rec = {}
|
||||
t0 = int(time.time())
|
||||
w.login()
|
||||
try:
|
||||
rec["install"] = w.deploy(app, sub) and w.wait_app(sub, "/", tries=90, delay=5)
|
||||
tok = fx.seed(w, sub, say)
|
||||
sw.backup_now(rec, say)
|
||||
sw.restore_unit(app, rec, say)
|
||||
say(" restore: " + rec["restore"].get("status", "")[:400])
|
||||
rec["copy_right_after"] = sw.g(f"ls -1 {undo} 2>&1").strip()
|
||||
say(" the copy right after: " + rec["copy_right_after"])
|
||||
for _ in range(36):
|
||||
time.sleep(10)
|
||||
if "No such file" in sw.g(f"ls -1 {undo} 2>&1"):
|
||||
break
|
||||
rec["copy_after_window"] = sw.g(f"ls -1 {undo} 2>&1").strip()
|
||||
rec["item"] = bool(tok) and bool(fx.verify(w, sub, tok, say))
|
||||
say(f" the copy after the window: {rec['copy_after_window']}; item {rec['item']}")
|
||||
finally:
|
||||
rec["lines"] = sw.scrub(sw.g(f"docker logs --since {t0} felhom-controller 2>&1 | grep -E 'stable-start sample {app}|{app}: ran stably|{app}.*not start|{app}.*did not run stably|Restore-from-unit completed: {app}' | cut -c1-260 | head -40"))
|
||||
sw.remove(app, keep=False, say=say)
|
||||
rec["after_remove"] = sw.leftovers(app, sub)
|
||||
json.dump(rec, open(os.path.join(d, "record.json"), "w"), ensure_ascii=False, indent=1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1])
|
||||
Reference in new issue
Block a user