Night 2026-10-17: restore keeps the DB password (R-1106, 07 §7.4), restic 0.19.1, hardening; 8 rows closed, 7 filed; evidence
gates / gates (push) Successful in 6m57s
gates / gates (push) Successful in 6m57s
This commit is contained in:
@@ -46,7 +46,7 @@ for V in 0.14.0 0.18.1; do
|
||||
$R -r $W/dmg check --read-data > $O/check-damaged.txt 2>&1; chmod -R u+w $W/dmg; rm -rf $W/dmg
|
||||
done
|
||||
# rewrite every local path to /data/x and the user/host names to neutral ones
|
||||
for f in $W/out/*/*; do sed -i -e "s#$W#/data/x#g" -e "s#<scratch> \"]*#/data/x#g" -e 's/user/root/g' -e 's/dooplex/box/g' "$f"; done
|
||||
for f in $W/out/*/*; do sed -i -e "s#$W#/data/x#g" -e "s#$S#/data/x#g" -e "s/$(id -un)/root/g" -e "s/$(hostname)/box/g" "$f"; done
|
||||
mkdir -p $DEST; cp -r $W/out/* $DEST/
|
||||
for V in 0.14.0 0.18.1; do echo "$V: $(ls $DEST/$V | wc -l) files, $(du -sh $DEST/$V | cut -f1)"; done
|
||||
grep -rl "$S\|claude-1000\|user" $DEST && echo "LEAK" || echo "no local path left"
|
||||
grep -rl "$S\|$(id -un)" $DEST && echo "LEAK" || echo "no local path left"
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
##### PATH A — off-site full restore after a reinstall
|
||||
22:49:18 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:50:08 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
22:50:08 install rallly: True
|
||||
22:50:08 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
22:50:08 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:51:29 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
22:51:29 install grimmory: True
|
||||
22:51:33 seed rallly r1106-A: LINE 1: ...te varchar(80)); insert into r1106_marker values (r1106-A); ...
|
||||
^
|
||||
CREATE TABLE
|
||||
22:51:33 check rallly: deployed=True state=running hold=None
|
||||
22:51:36 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker\n ^' (want 'r1106-A' present)
|
||||
22:51:39 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
22:51:43 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
22:51:46 front door: 301
|
||||
|
||||
22:51:49 seed grimmory r1106-A: --------------
|
||||
|
||||
ERROR 1054 (42S22) at line 1: Unknown column 'r1106' in 'VALUES'
|
||||
22:51:52 file: 0f4abe3bee6cd83e56b7a0f554cad3f6f7f91a8a0af59c024e67fbf7a01440cd /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt
|
||||
22:51:53 check grimmory: deployed=True state=running hold=None
|
||||
22:51:56 marker row: '' (want 'r1106-A' present)
|
||||
22:51:59 root login (the product's dump user): 1
|
||||
22:52:03 app user login (the app's own DB user): 1
|
||||
22:52:06 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T22:52:05.285639702","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T22:52:05.28566
|
||||
22:52:09 file: 0f4abe3bee6cd83e56b7a0f554cad3f6f7f91a8a0af59c024e67fbf7a01440cd /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt
|
||||
22:52:09 off-site before: status=ok last_run=2026-10-16T18:48:30Z snapshots=202
|
||||
22:52:09 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
22:52:09 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
22:54:47 + 157.4s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
22:54:50 + 160.4s ('running', '', 'prowlarr', 0) files 0/0 bytes /
|
||||
22:54:53 + 163.4s ('running', '', 'radarr', 0) files 0/0 bytes /
|
||||
22:54:56 + 166.5s ('running', '', 'romm', 100) files 8/10 bytes 187.9 MB/187.9 MB
|
||||
22:54:59 + 169.5s ('running', '', 'sonarr', 91) files 3/4 bytes 11.1 KB/12.2 KB
|
||||
22:55:02 + 172.5s ('running', '', 'privatebin', 0) files 0/0 bytes /
|
||||
22:55:05 + 175.6s ('running', '', 'rallly', 0) files 0/0 bytes /
|
||||
22:55:08 + 178.6s ('running', '', 'rallly', 100) files 7/7 bytes 50.1 MB/50.1 MB
|
||||
22:55:14 + 184.7s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
22:55:17 + 187.7s ('running', '', 'grimmory', 100) files 8/8 bytes 156.7 MB/156.7 MB
|
||||
22:55:20 + 190.7s ('running', '', 'bookstack', 100) files 11/11 bytes 160.7 MB/160.7 MB
|
||||
22:55:23 + 193.7s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
22:55:26 + 196.8s ('running', '', 'home-assistant', 100) files 6/6 bytes 12.5 MB/12.5 MB
|
||||
22:55:29 + 199.8s ('running', '', 'paperless-ngx', 0) files 0/0 bytes /
|
||||
22:55:32 + 202.8s ('running', '', 'paperless-ngx', 100) files 74/74 bytes 154.1 MB/154.1 MB
|
||||
22:55:35 + 205.8s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
22:55:38 + 208.9s ('running', '', 'kimai', 100) files 10/10 bytes 173.0 MB/173.0 MB
|
||||
22:55:41 + 211.9s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
22:55:47 + 217.9s ('ok', '', '', 0) files 0/0 bytes /
|
||||
22:55:47 off-site after: status=ok last_run=2026-10-16T20:55:46Z duration=3m31s snapshots=218 size=653.5 MB error=''
|
||||
22:56:30 remove rallly (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
22:57:04 remove grimmory (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
22:57:07 household deletes the books-folder files: 1
|
||||
22:57:08 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:57:58 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
22:57:58 install rallly: True
|
||||
22:57:58 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
22:57:58 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:59:29 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
22:59:29 install grimmory: True
|
||||
## negative control after the reinstall
|
||||
22:59:29 check rallly: deployed=True state=running hold=None
|
||||
22:59:33 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker\n ^' (want 'r1106-A' present)
|
||||
22:59:36 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
22:59:39 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
22:59:42 front door: 301
|
||||
|
||||
22:59:43 check grimmory: deployed=True state=running hold=None
|
||||
22:59:46 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-A' present)
|
||||
22:59:49 root login (the product's dump user): 1
|
||||
22:59:53 app user login (the app's own DB user): 1
|
||||
22:59:56 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T22:59:55.464371994","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T22:59:55.46441
|
||||
22:59:59 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt: No such file or directory
|
||||
23:00:03 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=rallly&full_prep=rallly&full_size=50.1+MB
|
||||
23:00:03 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.restore_started
|
||||
23:00:03 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:00:12 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:00:12 {"running": false, "op": "offbox-restore", "stack": "rallly", "started_at": "2026-10-16T21:00:03.606006931Z", "last": {"op": "offbox-restore", "stack": "rallly", "ok": true, "message": "A(z) rallly teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/rallly — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:00:11.039016046Z"}, "last_recent": true}
|
||||
23:00:12 POST /backup/offbox/reconstitute {'app': 'rallly', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.full_restore_started
|
||||
23:00:12 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:00:43 + 30.3s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:00:43 {"running": false, "op": "offbox-reconstitute", "stack": "rallly", "started_at": "2026-10-16T21:00:12.737270741Z", "last": {"op": "offbox-reconstitute", "stack": "rallly", "ok": true, "message": "A(z) rallly: 0 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 22:52) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:00:41.713460862Z"}, "last_recent": true}
|
||||
23:00:46 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=grimmory&full_prep=grimmory&full_size=156.7+MB
|
||||
23:00:46 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.restore_started
|
||||
23:00:46 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:00:55 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:00:55 {"running": false, "op": "offbox-restore", "stack": "grimmory", "started_at": "2026-10-16T21:00:46.868233201Z", "last": {"op": "offbox-restore", "stack": "grimmory", "ok": true, "message": "A(z) grimmory teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/grimmory — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:00:55.045276695Z"}, "last_recent": true}
|
||||
23:00:55 POST /backup/offbox/reconstitute {'app': 'grimmory', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.full_restore_started
|
||||
23:00:56 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:01:50 + 54.5s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:01:50 {"running": false, "op": "offbox-reconstitute", "stack": "grimmory", "started_at": "2026-10-16T21:00:55.98356812Z", "last": {"op": "offbox-reconstitute", "stack": "grimmory", "ok": true, "message": "A(z) grimmory: 1 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 22:52) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:01:48.947953301Z"}, "last_recent": true}
|
||||
## after the off-site restore
|
||||
23:02:50 check rallly: deployed=True state=running hold=None
|
||||
23:02:54 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker;\n ^' (want 'r1106-A' present)
|
||||
23:02:57 rallly log auth errors (10 min) / status: 0 | Up | 2 | minutes | (healthy)
|
||||
23:03:00 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:03:03 front door: 301
|
||||
|
||||
23:03:04 check grimmory: deployed=True state=running hold=None
|
||||
23:03:07 marker row: '' (want 'r1106-A' present)
|
||||
23:03:10 root login (the product's dump user): 1
|
||||
23:03:14 app user login (the app's own DB user): 1
|
||||
23:03:17 app health: Up 2 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:03:16.428599078","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:03:16.42862
|
||||
23:03:20 file: 0f4abe3bee6cd83e56b7a0f554cad3f6f7f91a8a0af59c024e67fbf7a01440cd /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt
|
||||
@@ -0,0 +1,95 @@
|
||||
##### PATH A2 — off-site full restore after a reinstall (seed fixed)
|
||||
23:12:31 seed rallly r1106-A2: CREATE TABLE
|
||||
INSERT 0 1
|
||||
r1106-A2
|
||||
23:12:31 check rallly: deployed=True state=running hold=None
|
||||
23:12:34 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:12:37 rallly log auth errors (10 min) / status: 0 | Up | 12 | minutes | (healthy)
|
||||
23:12:41 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:12:44 front door: 301
|
||||
|
||||
23:12:48 seed grimmory r1106-A2: r1106-A2
|
||||
23:12:51 file: 50a1cfbcde9a13e801c30d3bd9f65457e3249704a3c925fe5e8d6baba886ea79 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt
|
||||
23:12:51 check grimmory: deployed=True state=running hold=None
|
||||
23:12:54 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:12:58 root login (the product's dump user): 1
|
||||
23:13:01 app user login (the app's own DB user): 1
|
||||
23:13:04 app health: Up 11 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:13:03.583521678","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:13:03.58356
|
||||
23:13:07 file: 50a1cfbcde9a13e801c30d3bd9f65457e3249704a3c925fe5e8d6baba886ea79 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt
|
||||
23:13:07 off-site before: status=ok last_run=2026-10-16T20:55:46Z snapshots=218
|
||||
23:13:07 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:13:07 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:15:42 + 154.3s ('running', '', 'romm', 0) files 0/0 bytes /
|
||||
23:15:45 + 157.4s ('running', '', 'sonarr', 0) files 0/0 bytes /
|
||||
23:15:48 + 160.4s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:15:51 + 163.4s ('running', '', 'rallly', 0) files 0/0 bytes /
|
||||
23:15:54 + 166.4s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
23:15:57 + 169.5s ('running', '', 'bookstack', 0) files 0/0 bytes /
|
||||
23:16:00 + 172.5s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:16:03 + 175.5s ('running', '', 'home-assistant', 100) files 6/6 bytes 12.6 MB/12.6 MB
|
||||
23:16:06 + 178.5s ('running', '', 'paperless-ngx', 0) files 0/0 bytes /
|
||||
23:16:09 + 181.6s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
23:16:12 + 184.6s ('running', '', 'kimai', 0) files 0/0 bytes /
|
||||
23:16:15 + 187.6s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:16:18 + 190.6s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:16:24 + 196.7s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:16:24 off-site after: status=ok last_run=2026-10-16T21:16:23Z duration=3m12s snapshots=234 size=670.9 MB error=''
|
||||
23:17:07 remove rallly (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
23:17:41 remove grimmory (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
23:17:45 household deletes the books-folder files: 2
|
||||
23:17:45 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:18:35 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
23:18:35 install rallly: True
|
||||
23:18:35 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:18:36 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:19:56 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:19:56 install grimmory: True
|
||||
## A2 negative control after the reinstall
|
||||
23:19:56 check rallly: deployed=True state=running hold=None
|
||||
23:20:00 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker;\n ^' (want 'r1106-A2' present)
|
||||
23:20:03 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
23:20:06 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:20:10 front door: 301
|
||||
|
||||
23:20:10 check grimmory: deployed=True state=running hold=None
|
||||
23:20:13 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-A2' present)
|
||||
23:20:16 root login (the product's dump user): 1
|
||||
23:20:20 app user login (the app's own DB user): 1
|
||||
23:20:23 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:20:22.859735764","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:20:22.85975
|
||||
23:20:26 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt: No such file or directory
|
||||
23:20:30 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=rallly&full_prep=rallly&full_size=66.9+MB
|
||||
23:20:30 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.restore_started
|
||||
23:20:30 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:20:39 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:20:39 {"running": false, "op": "offbox-restore", "stack": "rallly", "started_at": "2026-10-16T21:20:30.883566825Z", "last": {"op": "offbox-restore", "stack": "rallly", "ok": true, "message": "A(z) rallly teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/rallly — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:20:38.696061676Z"}, "last_recent": true}
|
||||
23:20:40 POST /backup/offbox/reconstitute {'app': 'rallly', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.full_restore_started
|
||||
23:20:40 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:21:10 + 30.3s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:21:10 {"running": false, "op": "offbox-reconstitute", "stack": "rallly", "started_at": "2026-10-16T21:20:40.00486394Z", "last": {"op": "offbox-reconstitute", "stack": "rallly", "ok": true, "message": "A(z) rallly: 0 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 23:13) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:21:09.345344912Z"}, "last_recent": true}
|
||||
23:21:14 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=grimmory&full_prep=grimmory&full_size=156.8+MB
|
||||
23:21:14 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.restore_started
|
||||
23:21:14 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:21:23 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:21:23 {"running": false, "op": "offbox-restore", "stack": "grimmory", "started_at": "2026-10-16T21:21:14.156589916Z", "last": {"op": "offbox-restore", "stack": "grimmory", "ok": true, "message": "A(z) grimmory teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/grimmory — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:21:22.333018655Z"}, "last_recent": true}
|
||||
23:21:23 POST /backup/offbox/reconstitute {'app': 'grimmory', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.full_restore_started
|
||||
23:21:23 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:22:17 + 54.5s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:22:17 {"running": false, "op": "offbox-reconstitute", "stack": "grimmory", "started_at": "2026-10-16T21:21:23.276103566Z", "last": {"op": "offbox-reconstitute", "stack": "grimmory", "ok": true, "message": "A(z) grimmory: 2 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 23:13) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:22:15.633221727Z"}, "last_recent": true}
|
||||
## A2 after the off-site restore
|
||||
23:23:02 check rallly: deployed=True state=running hold=None
|
||||
23:23:07 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:23:10 rallly log auth errors (10 min) / status: 0 | Up | 2 | minutes | (healthy)
|
||||
23:23:14 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:23:18 front door: 301
|
||||
|
||||
23:23:18 check grimmory: deployed=True state=running hold=None
|
||||
23:23:22 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:23:26 root login (the product's dump user): 1
|
||||
23:23:30 app user login (the app's own DB user): 1
|
||||
23:23:34 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:23:33.152578787","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:23:33.15260
|
||||
23:23:38 file: 50a1cfbcde9a13e801c30d3bd9f65457e3249704a3c925fe5e8d6baba886ea79 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt
|
||||
/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/night-restore-2026-10-17/tools/run_AB.sh: line 12: syntax error near unexpected token `)'
|
||||
/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/night-restore-2026-10-17/tools/run_AB.sh: line 12: `echo "##### PATH B — on-box restore („Visszaállítás") after a reinstall"'
|
||||
@@ -0,0 +1,79 @@
|
||||
##### PATH B — on-box restore (Visszaallitas) after a reinstall
|
||||
23:24:08 seed rallly r1106-B: INSERT 0 1
|
||||
r1106-A2
|
||||
r1106-B
|
||||
23:24:13 seed grimmory r1106-B: r1106-A2
|
||||
r1106-B
|
||||
23:24:17 file: c90bc7913f76e3b72bd245b1f4f0b6c3b2be0a6de62bf95374eb47f62b9fb7cf /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-B.txt
|
||||
23:24:17 off-site before: status=ok last_run=2026-10-16T21:16:23Z snapshots=234
|
||||
23:24:17 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:24:17 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:27:10 + 172.5s ('running', '', 'opengist', 0) files 0/0 bytes /
|
||||
23:27:13 + 175.6s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
23:27:16 + 178.6s ('running', '', 'kimai', 0) files 0/0 bytes /
|
||||
23:27:19 + 181.6s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:27:22 + 184.6s ('running', '', 'prowlarr', 100) files 4/4 bytes 9.1 KB/9.1 KB
|
||||
23:27:25 + 187.7s ('running', '', 'romm', 0) files 0/0 bytes /
|
||||
23:27:28 + 190.7s ('running', '', 'sonarr', 0) files 0/0 bytes /
|
||||
23:27:31 + 193.7s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:27:34 + 196.8s ('running', '', 'rallly', 0) files 0/0 bytes /
|
||||
23:27:37 + 199.8s ('running', '', 'rallly', 100) files 8/8 bytes 67.0 MB/67.0 MB
|
||||
23:27:40 + 202.8s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
23:27:43 + 205.8s ('running', '', 'bookstack', 0) files 0/0 bytes /
|
||||
23:27:46 + 208.9s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:27:49 + 211.9s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
23:27:52 + 214.9s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:27:58 + 221.0s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:27:58 off-site after: status=ok last_run=2026-10-16T21:27:57Z duration=3m35s snapshots=250 size=687.5 MB error=''
|
||||
23:28:41 remove rallly (keepbackups: remove_hdd_data=True, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
23:29:15 remove grimmory (keepbackups: remove_hdd_data=True, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
23:29:19 household deletes the books-folder files: 3
|
||||
23:29:20 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:30:15 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
23:30:15 install rallly: True
|
||||
23:30:15 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:30:15 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:31:36 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:31:36 install grimmory: True
|
||||
## B negative control after the reinstall
|
||||
23:31:36 check rallly: deployed=True state=running hold=None
|
||||
23:31:40 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker;\n ^' (want 'r1106-B' present)
|
||||
23:31:43 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
23:31:46 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:31:50 front door: 301
|
||||
|
||||
23:31:50 check grimmory: deployed=True state=running hold=None
|
||||
23:31:53 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-B' present)
|
||||
23:31:56 root login (the product's dump user): 1
|
||||
23:32:00 app user login (the app's own DB user): 1
|
||||
23:32:03 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:32:02.311256259","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:32:02.31127
|
||||
23:32:06 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-B.txt: No such file or directory
|
||||
23:32:06 [R] restoring rallly from snapshot 'helyi' (of 1 offered)
|
||||
23:32:06 [R] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
23:32:06 + 0.0s restore (True, None, None)
|
||||
23:32:34 + 28.3s restore (False, None, None)
|
||||
23:32:34 [R] after restore: state=running hold=None phase=None
|
||||
23:32:38 onbox restore: {"ok": true, "snapshot_id": "helyi", "http": "HTTP/2 302", "location": ["location: /backups/restore?flash=flash.restore.started"], "seconds": 28.4}
|
||||
23:32:38 restore-status: {"running": false, "op": "restore", "stack": "rallly", "started_at": "2026-10-16T21:32:06.602574836Z", "last": {"op": "restore", "stack": "rallly", "ok": true, "message": "A(z) rallly: 1 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:32:33.370797695Z"}, "last_recent": true}
|
||||
23:32:38 [R] restoring grimmory from snapshot 'helyi' (of 1 offered)
|
||||
23:33:18 [R] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+A+f%C3%A1jlok+a+t%C3%A1voli+m%C3%A1solatb%C3%B3l+%C3%A1ll%C3%ADthat%C3%B3k+vissza%3A+Biztons%C3%A1gi+ment%C3%A9s+%E2%86%92+Vissza%C3%A1ll%C3%ADt%C3%A1s%2C+%E2%80%9ETeljes+vissza%C3%A1ll%C3%ADt%C3%A1s+%28f%C3%A1jlok+%2B+adatb%C3%A1zis%29%E2%80%9D.']
|
||||
23:33:18 + 0.0s restore (False, None, None)
|
||||
23:33:25 [R] after restore: state=running hold=None phase=None
|
||||
23:33:28 onbox restore: {"ok": true, "snapshot_id": "helyi", "http": "HTTP/2 302", "location": ["location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+A+f%C3%A1jlok+a+t%C3%A1voli+m%C3%A1solatb%C3%B3l+%C3%A1ll%C3%ADthat%C3%B3k+vissza%3A+Biztons%C3%A1gi+ment%C3%A9s+%E2%86%92+Vissza%C3%A1ll%C3%ADt%C3%A1s%2C+%E2%80%9ETeljes+vissza%C3%A1ll%C3%ADt%C3%A1s+%28f%C3%A1jlok+%2B+adatb%C3%A1zis%29%E2%80%9D."], "seconds": 6.1}
|
||||
23:33:28 restore-status: {"running": false, "op": "restore", "stack": "rallly", "started_at": "2026-10-16T21:32:06.602574836Z", "last": {"op": "restore", "stack": "rallly", "ok": true, "message": "A(z) rallly: 1 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:32:33.370797695Z"}, "last_recent": true}
|
||||
## B after the on-box restore
|
||||
23:34:14 check rallly: deployed=True state=running hold=None
|
||||
23:34:17 marker row: 'r1106-A2\nr1106-B' (want 'r1106-B' present)
|
||||
23:34:21 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
23:34:24 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:34:27 front door: 301
|
||||
|
||||
23:34:27 check grimmory: deployed=True state=running hold=None
|
||||
23:34:31 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-B' present)
|
||||
23:34:34 root login (the product's dump user): 1
|
||||
23:34:37 app user login (the app's own DB user): 1
|
||||
23:34:41 app health: Up 3 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:34:39.959127823","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:34:39.95916
|
||||
23:34:44 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-B.txt: No such file or directory
|
||||
##### DONE
|
||||
@@ -0,0 +1,18 @@
|
||||
##### REFUSAL — a unit without the database password, over a newer install (rallly)
|
||||
unit app.yaml now carries DB_PASSWORD: 0
|
||||
deployed_at: "2026-10-16T21:32:19Z"
|
||||
"dumps_at": "2026-10-16T21:24:17Z
|
||||
23:35:13 [R] restoring rallly from snapshot 'helyi' (of 1 offered)
|
||||
23:35:13 [R] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
23:35:13 + 0.0s restore (False, None, None)
|
||||
23:35:19 [R] after restore: state=running hold=None phase=None
|
||||
23:35:22 onbox restore: {"ok": true, "snapshot_id": "helyi", "http": "HTTP/2 302", "location": ["location: /backups/restore?flash=flash.restore.started"], "seconds": 6.1}
|
||||
23:35:22 restore-status: {"running": false, "op": "restore", "stack": "rallly", "started_at": "2026-10-16T21:35:13.244020136Z", "last": {"op": "restore", "stack": "rallly", "ok": false, "message": "Visszaállítás sikertelen: Ezt a mentést nem lehet visszaállítani: nem tartalmazza az adatbázis jelszavát, és nélküle az alkalmazás nem tudna elindulni. A mostani telepítés érintetlen maradt.", "finished_at": "2026-10-16T21:35:13.253731205Z"}, "last_recent": true}
|
||||
23:35:42 check rallly: deployed=True state=running hold=None
|
||||
23:35:46 marker row: 'r1106-A2\nr1106-B' (want 'r1106-B' present)
|
||||
23:35:49 rallly log auth errors (10 min) / status: 0 | Up | 3 | minutes | (healthy)
|
||||
23:35:52 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:35:55 front door: 301
|
||||
|
||||
2026/10/16 21:35:13 restore_dbcreds.go:111: [ERROR] [backup] Restore REFUSED for rallly before any change: restore refused: the backup does not carry the database password: [DB_PASSWORD] (the current install is not older than the data, or no value at all) (R-1
|
||||
unit restored: DB_PASSWORD lines 1
|
||||
@@ -0,0 +1,51 @@
|
||||
##### PATH D — install from backup (use kept data), grimmory
|
||||
23:36:10 seed grimmory r1106-D: r1106-D
|
||||
23:36:13 file: b9a6247e71922dce28dfccaabaebee528e89f125052cb799ea3e8ba2bd579b9e /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D.txt
|
||||
23:36:13 check grimmory: deployed=True state=running hold=None
|
||||
23:36:16 marker row: 'r1106-D' (want 'r1106-D' present)
|
||||
23:36:19 root login (the product's dump user): 1
|
||||
23:36:23 app user login (the app's own DB user): 1
|
||||
23:36:26 app health: Up 5 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:36:25.554584861","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:36:25.55460
|
||||
23:36:29 file: b9a6247e71922dce28dfccaabaebee528e89f125052cb799ea3e8ba2bd579b9e /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D.txt
|
||||
23:36:29 off-site before: status=ok last_run=2026-10-16T21:27:57Z snapshots=250
|
||||
23:36:29 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:36:30 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:39:07 + 157.3s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
23:39:10 + 160.4s ('running', '', 'bookstack', 0) files 0/0 bytes /
|
||||
23:39:13 + 163.4s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:39:16 + 166.4s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
23:39:19 + 169.4s ('running', '', 'home-assistant', 100) files 6/6 bytes 12.7 MB/12.7 MB
|
||||
23:39:22 + 172.5s ('running', '', 'opengist', 0) files 0/0 bytes /
|
||||
23:39:25 + 175.5s ('running', '', 'paperless-ngx', 100) files 74/74 bytes 154.1 MB/154.1 MB
|
||||
23:39:28 + 178.5s ('running', '', 'docmost', 100) files 12/12 bytes 105.1 MB/105.1 MB
|
||||
23:39:31 + 181.5s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:39:34 + 184.6s ('running', '', 'prowlarr', 0) files 0/0 bytes /
|
||||
23:39:37 + 187.6s ('running', '', 'romm', 0) files 0/0 bytes /
|
||||
23:39:40 + 190.6s ('running', '', 'romm', 100) files 10/10 bytes 189.8 MB/189.8 MB
|
||||
23:39:43 + 193.6s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:39:46 + 196.7s ('running', '', 'privatebin', 0) files 0/0 bytes /
|
||||
23:39:49 + 199.7s ('running', '', 'rallly', 100) files 8/8 bytes 67.5 MB/67.5 MB
|
||||
23:39:52 + 202.7s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:39:58 + 208.8s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:39:58 off-site after: status=ok last_run=2026-10-16T21:39:56Z duration=3m23s snapshots=266 size=704.6 MB error=''
|
||||
23:40:32 remove grimmory (keepdata: remove_hdd_data=False, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us
|
||||
## after remove (data kept)
|
||||
/mnt/felhom-drives/hdd_1/appdata/grimmory/:
|
||||
data
|
||||
|
||||
/mnt/felhom-drives/hdd_1/userdata/media/grimmory/:
|
||||
r1106-D.txt
|
||||
0
|
||||
23:40:33 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:40:34 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:41:59 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:41:59 install grimmory with kept_data=use: True
|
||||
## after install with kept data
|
||||
23:42:29 check grimmory: deployed=True state=running hold=None
|
||||
23:42:33 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-D' present)
|
||||
23:42:36 root login (the product's dump user): 1
|
||||
23:42:39 app user login (the app's own DB user): 1
|
||||
23:42:43 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:42:42.23419292","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:42:42.234213
|
||||
23:42:46 file: b9a6247e71922dce28dfccaabaebee528e89f125052cb799ea3e8ba2bd579b9e /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D.txt
|
||||
@@ -0,0 +1,43 @@
|
||||
##### PATH D2 — install from backup (use kept data), grimmory, with app data in appdata/grimmory/data
|
||||
dc2f9452f403591fc4a69f587af72cab73fb8d942d14a4e196481caf6703546e /mnt/felhom-drives/hdd_1/appdata/grimmory/data/r1106-cover.bin
|
||||
23:43:14 seed grimmory r1106-D2: r1106-D2
|
||||
23:43:17 file: a584aeaa731c68ace4355bbcffa492f6f578af38c12142ff943aeb2880564ab0 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D2.txt
|
||||
23:43:18 off-site before: status=ok last_run=2026-10-16T21:39:56Z snapshots=266
|
||||
23:43:18 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:43:18 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:45:52 + 154.3s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:45:55 + 157.3s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
23:45:58 + 160.4s ('running', '', 'opengist', 0) files 0/0 bytes /
|
||||
23:46:01 + 163.4s ('running', '', 'paperless-ngx', 28) files 70/74 bytes 42.6 MB/154.2 MB
|
||||
23:46:04 + 166.4s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
23:46:07 + 169.4s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:46:10 + 172.5s ('running', '', 'prowlarr', 0) files 0/0 bytes /
|
||||
23:46:13 + 175.5s ('running', '', 'radarr', 0) files 0/0 bytes /
|
||||
23:46:16 + 178.5s ('running', '', 'romm', 100) files 10/10 bytes 190.0 MB/190.0 MB
|
||||
23:46:19 + 181.5s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:46:22 + 184.6s ('running', '', 'privatebin', 0) files 0/0 bytes /
|
||||
23:46:25 + 187.6s ('running', '', 'rallly', 100) files 8/8 bytes 67.5 MB/67.5 MB
|
||||
23:46:28 + 190.6s ('running', '', 'grimmory', 100) files 11/11 bytes 156.9 MB/156.9 MB
|
||||
23:46:31 + 193.6s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:46:37 + 199.7s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:46:37 off-site after: status=ok last_run=2026-10-16T21:46:35Z duration=3m13s snapshots=282 size=719.2 MB error=''
|
||||
23:47:11 remove grimmory (keepdata: remove_hdd_data=False, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (8.0K)'], 'us
|
||||
23:47:11 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:47:13 [1] deploy -> 202 {'ok': True, 'message': 'A(z) Grimmory megőrzött adatainak betöltése elindult.'}
|
||||
23:47:38 [1] deployed, controller state=unhealthy, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:47:38 [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate
|
||||
23:47:38 install grimmory with kept_data=use: True
|
||||
2026/10/16 21:47:12 image_retention.go:238: [INFO] [stacks] image retention (remove of grimmory): pass over 53 image(s) of [ghcr.io/grimmory-tools/grimmory mariadb] — 2 candidate(s), 2 deleted, the rest kept
|
||||
2026/10/16 21:47:13 kept_install.go:97: [INFO] [api] Deploy grimmory: USE MY KEPT DATA — loading from /mnt/felhom-drives/hdd_1/backups/primary/grimmory (tier 1, 2026-10-16T21:43:18Z) under the kept files [/mnt/felhom-drives/hdd_
|
||||
2026/10/16 21:47:13 restore_dbcreds.go:114: [INFO] [backup] Restore grimmory: database password(s) [DB_PASSWORD DB_ROOT_PASSWORD] come from the backup, [] stay as installed (older than the data) — values not logged (R-1106)
|
||||
2026/10/16 21:48:29 restore_unit.go:487: [INFO] [backup] Restore-from-unit completed: grimmory — 1 volume(s) of 1 listed, 1 database(s) of 1 listed
|
||||
2026/10/16 21:48:29 kept_load.go:331: [INFO] [backup] kept load grimmory from /mnt/felhom-drives/hdd_1/backups/primary/grimmory done in 1m16s (volumes 1/1, dbs 1/1)
|
||||
dc2f9452f403591fc4a69f587af72cab73fb8d942d14a4e196481caf6703546e /mnt/felhom-drives/hdd_1/appdata/grimmory/data/r1106-cover.bin
|
||||
## after install with kept data
|
||||
23:48:40 check grimmory: deployed=True state=running hold=None
|
||||
23:48:43 marker row: 'r1106-D2' (want 'r1106-D2' present)
|
||||
23:48:47 root login (the product's dump user): 1
|
||||
23:48:50 app user login (the app's own DB user): 1
|
||||
23:48:53 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:48:52.592861758","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:48:52.59288
|
||||
23:48:56 file: a584aeaa731c68ace4355bbcffa492f6f578af38c12142ff943aeb2880564ab0 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D2.txt
|
||||
@@ -0,0 +1,11 @@
|
||||
23:54:12 remove rallly (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
23:54:46 remove grimmory (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (8.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
23:54:49 household deletes the books-folder files: 2
|
||||
0
|
||||
rmdir: failed to remove '/mnt/felhom-drives/hdd_1/appdata/grimmory/data': No such file or directory
|
||||
0
|
||||
0
|
||||
ls: cannot access '/mnt/sys_drive/felhom-data/backups/primary/rallly': No such file or directory
|
||||
ls: cannot access '/mnt/felhom-drives/hdd_1/backups/primary/grimmory': No such file or directory
|
||||
ls: cannot access '/mnt/felhom-drives/hdd_1/backups/offsite-restore/*': No such file or directory
|
||||
holds: ['kimai']
|
||||
@@ -0,0 +1,360 @@
|
||||
22:49:18 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:50:08 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
22:50:08 install rallly: True
|
||||
22:50:08 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
22:50:08 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:51:29 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
22:51:29 install grimmory: True
|
||||
22:51:33 seed rallly r1106-A: LINE 1: ...te varchar(80)); insert into r1106_marker values (r1106-A); ...
|
||||
^
|
||||
CREATE TABLE
|
||||
22:51:33 check rallly: deployed=True state=running hold=None
|
||||
22:51:36 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker\n ^' (want 'r1106-A' present)
|
||||
22:51:39 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
22:51:43 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
22:51:46 front door: 301
|
||||
|
||||
22:51:49 seed grimmory r1106-A: --------------
|
||||
|
||||
ERROR 1054 (42S22) at line 1: Unknown column 'r1106' in 'VALUES'
|
||||
22:51:52 file: 0f4abe3bee6cd83e56b7a0f554cad3f6f7f91a8a0af59c024e67fbf7a01440cd /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt
|
||||
22:51:53 check grimmory: deployed=True state=running hold=None
|
||||
22:51:56 marker row: '' (want 'r1106-A' present)
|
||||
22:51:59 root login (the product's dump user): 1
|
||||
22:52:03 app user login (the app's own DB user): 1
|
||||
22:52:06 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T22:52:05.285639702","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T22:52:05.28566
|
||||
22:52:09 file: 0f4abe3bee6cd83e56b7a0f554cad3f6f7f91a8a0af59c024e67fbf7a01440cd /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt
|
||||
22:52:09 off-site before: status=ok last_run=2026-10-16T18:48:30Z snapshots=202
|
||||
22:52:09 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
22:52:09 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
22:54:47 + 157.4s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
22:54:50 + 160.4s ('running', '', 'prowlarr', 0) files 0/0 bytes /
|
||||
22:54:53 + 163.4s ('running', '', 'radarr', 0) files 0/0 bytes /
|
||||
22:54:56 + 166.5s ('running', '', 'romm', 100) files 8/10 bytes 187.9 MB/187.9 MB
|
||||
22:54:59 + 169.5s ('running', '', 'sonarr', 91) files 3/4 bytes 11.1 KB/12.2 KB
|
||||
22:55:02 + 172.5s ('running', '', 'privatebin', 0) files 0/0 bytes /
|
||||
22:55:05 + 175.6s ('running', '', 'rallly', 0) files 0/0 bytes /
|
||||
22:55:08 + 178.6s ('running', '', 'rallly', 100) files 7/7 bytes 50.1 MB/50.1 MB
|
||||
22:55:14 + 184.7s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
22:55:17 + 187.7s ('running', '', 'grimmory', 100) files 8/8 bytes 156.7 MB/156.7 MB
|
||||
22:55:20 + 190.7s ('running', '', 'bookstack', 100) files 11/11 bytes 160.7 MB/160.7 MB
|
||||
22:55:23 + 193.7s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
22:55:26 + 196.8s ('running', '', 'home-assistant', 100) files 6/6 bytes 12.5 MB/12.5 MB
|
||||
22:55:29 + 199.8s ('running', '', 'paperless-ngx', 0) files 0/0 bytes /
|
||||
22:55:32 + 202.8s ('running', '', 'paperless-ngx', 100) files 74/74 bytes 154.1 MB/154.1 MB
|
||||
22:55:35 + 205.8s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
22:55:38 + 208.9s ('running', '', 'kimai', 100) files 10/10 bytes 173.0 MB/173.0 MB
|
||||
22:55:41 + 211.9s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
22:55:47 + 217.9s ('ok', '', '', 0) files 0/0 bytes /
|
||||
22:55:47 off-site after: status=ok last_run=2026-10-16T20:55:46Z duration=3m31s snapshots=218 size=653.5 MB error=''
|
||||
22:56:30 remove rallly (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
22:57:04 remove grimmory (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
22:57:07 household deletes the books-folder files: 1
|
||||
22:57:08 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:57:58 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
22:57:58 install rallly: True
|
||||
22:57:58 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
22:57:58 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
22:59:29 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
22:59:29 install grimmory: True
|
||||
22:59:29 check rallly: deployed=True state=running hold=None
|
||||
22:59:33 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker\n ^' (want 'r1106-A' present)
|
||||
22:59:36 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
22:59:39 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
22:59:42 front door: 301
|
||||
|
||||
22:59:43 check grimmory: deployed=True state=running hold=None
|
||||
22:59:46 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-A' present)
|
||||
22:59:49 root login (the product's dump user): 1
|
||||
22:59:53 app user login (the app's own DB user): 1
|
||||
22:59:56 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T22:59:55.464371994","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T22:59:55.46441
|
||||
22:59:59 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt: No such file or directory
|
||||
23:00:03 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=rallly&full_prep=rallly&full_size=50.1+MB
|
||||
23:00:03 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.restore_started
|
||||
23:00:03 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:00:12 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:00:12 {"running": false, "op": "offbox-restore", "stack": "rallly", "started_at": "2026-10-16T21:00:03.606006931Z", "last": {"op": "offbox-restore", "stack": "rallly", "ok": true, "message": "A(z) rallly teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/rallly — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:00:11.039016046Z"}, "last_recent": true}
|
||||
23:00:12 POST /backup/offbox/reconstitute {'app': 'rallly', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.full_restore_started
|
||||
23:00:12 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:00:43 + 30.3s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:00:43 {"running": false, "op": "offbox-reconstitute", "stack": "rallly", "started_at": "2026-10-16T21:00:12.737270741Z", "last": {"op": "offbox-reconstitute", "stack": "rallly", "ok": true, "message": "A(z) rallly: 0 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 22:52) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:00:41.713460862Z"}, "last_recent": true}
|
||||
23:00:46 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=grimmory&full_prep=grimmory&full_size=156.7+MB
|
||||
23:00:46 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.restore_started
|
||||
23:00:46 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:00:55 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:00:55 {"running": false, "op": "offbox-restore", "stack": "grimmory", "started_at": "2026-10-16T21:00:46.868233201Z", "last": {"op": "offbox-restore", "stack": "grimmory", "ok": true, "message": "A(z) grimmory teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/grimmory — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:00:55.045276695Z"}, "last_recent": true}
|
||||
23:00:55 POST /backup/offbox/reconstitute {'app': 'grimmory', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.full_restore_started
|
||||
23:00:56 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:01:50 + 54.5s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:01:50 {"running": false, "op": "offbox-reconstitute", "stack": "grimmory", "started_at": "2026-10-16T21:00:55.98356812Z", "last": {"op": "offbox-reconstitute", "stack": "grimmory", "ok": true, "message": "A(z) grimmory: 1 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 22:52) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:01:48.947953301Z"}, "last_recent": true}
|
||||
23:02:50 check rallly: deployed=True state=running hold=None
|
||||
23:02:54 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker;\n ^' (want 'r1106-A' present)
|
||||
23:02:57 rallly log auth errors (10 min) / status: 0 | Up | 2 | minutes | (healthy)
|
||||
23:03:00 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:03:03 front door: 301
|
||||
|
||||
23:03:04 check grimmory: deployed=True state=running hold=None
|
||||
23:03:07 marker row: '' (want 'r1106-A' present)
|
||||
23:03:10 root login (the product's dump user): 1
|
||||
23:03:14 app user login (the app's own DB user): 1
|
||||
23:03:17 app health: Up 2 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:03:16.428599078","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:03:16.42862
|
||||
23:03:20 file: 0f4abe3bee6cd83e56b7a0f554cad3f6f7f91a8a0af59c024e67fbf7a01440cd /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A.txt
|
||||
23:12:31 seed rallly r1106-A2: CREATE TABLE
|
||||
INSERT 0 1
|
||||
r1106-A2
|
||||
23:12:31 check rallly: deployed=True state=running hold=None
|
||||
23:12:34 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:12:37 rallly log auth errors (10 min) / status: 0 | Up | 12 | minutes | (healthy)
|
||||
23:12:41 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:12:44 front door: 301
|
||||
|
||||
23:12:48 seed grimmory r1106-A2: r1106-A2
|
||||
23:12:51 file: 50a1cfbcde9a13e801c30d3bd9f65457e3249704a3c925fe5e8d6baba886ea79 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt
|
||||
23:12:51 check grimmory: deployed=True state=running hold=None
|
||||
23:12:54 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:12:58 root login (the product's dump user): 1
|
||||
23:13:01 app user login (the app's own DB user): 1
|
||||
23:13:04 app health: Up 11 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:13:03.583521678","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:13:03.58356
|
||||
23:13:07 file: 50a1cfbcde9a13e801c30d3bd9f65457e3249704a3c925fe5e8d6baba886ea79 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt
|
||||
23:13:07 off-site before: status=ok last_run=2026-10-16T20:55:46Z snapshots=218
|
||||
23:13:07 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:13:07 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:15:42 + 154.3s ('running', '', 'romm', 0) files 0/0 bytes /
|
||||
23:15:45 + 157.4s ('running', '', 'sonarr', 0) files 0/0 bytes /
|
||||
23:15:48 + 160.4s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:15:51 + 163.4s ('running', '', 'rallly', 0) files 0/0 bytes /
|
||||
23:15:54 + 166.4s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
23:15:57 + 169.5s ('running', '', 'bookstack', 0) files 0/0 bytes /
|
||||
23:16:00 + 172.5s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:16:03 + 175.5s ('running', '', 'home-assistant', 100) files 6/6 bytes 12.6 MB/12.6 MB
|
||||
23:16:06 + 178.5s ('running', '', 'paperless-ngx', 0) files 0/0 bytes /
|
||||
23:16:09 + 181.6s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
23:16:12 + 184.6s ('running', '', 'kimai', 0) files 0/0 bytes /
|
||||
23:16:15 + 187.6s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:16:18 + 190.6s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:16:24 + 196.7s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:16:24 off-site after: status=ok last_run=2026-10-16T21:16:23Z duration=3m12s snapshots=234 size=670.9 MB error=''
|
||||
23:17:07 remove rallly (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
23:17:41 remove grimmory (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
23:17:45 household deletes the books-folder files: 2
|
||||
23:17:45 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:18:35 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
23:18:35 install rallly: True
|
||||
23:18:35 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:18:36 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:19:56 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:19:56 install grimmory: True
|
||||
23:19:56 check rallly: deployed=True state=running hold=None
|
||||
23:20:00 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker;\n ^' (want 'r1106-A2' present)
|
||||
23:20:03 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
23:20:06 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:20:10 front door: 301
|
||||
|
||||
23:20:10 check grimmory: deployed=True state=running hold=None
|
||||
23:20:13 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-A2' present)
|
||||
23:20:16 root login (the product's dump user): 1
|
||||
23:20:20 app user login (the app's own DB user): 1
|
||||
23:20:23 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:20:22.859735764","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:20:22.85975
|
||||
23:20:26 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt: No such file or directory
|
||||
23:20:30 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=rallly&full_prep=rallly&full_size=66.9+MB
|
||||
23:20:30 POST /backup/offbox/restore {'app': 'rallly', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.restore_started
|
||||
23:20:30 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:20:39 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:20:39 {"running": false, "op": "offbox-restore", "stack": "rallly", "started_at": "2026-10-16T21:20:30.883566825Z", "last": {"op": "offbox-restore", "stack": "rallly", "ok": true, "message": "A(z) rallly teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/rallly — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:20:38.696061676Z"}, "last_recent": true}
|
||||
23:20:40 POST /backup/offbox/reconstitute {'app': 'rallly', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=rallly&flash=flash.offbox.full_restore_started
|
||||
23:20:40 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:21:10 + 30.3s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:21:10 {"running": false, "op": "offbox-reconstitute", "stack": "rallly", "started_at": "2026-10-16T21:20:40.00486394Z", "last": {"op": "offbox-reconstitute", "stack": "rallly", "ok": true, "message": "A(z) rallly: 0 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 23:13) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:21:09.345344912Z"}, "last_recent": true}
|
||||
23:21:14 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full'} -> HTTP/2 302 /backups/restore/app?name=grimmory&full_prep=grimmory&full_size=156.8+MB
|
||||
23:21:14 POST /backup/offbox/restore {'app': 'grimmory', 'mode': 'full', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.restore_started
|
||||
23:21:14 + 0.0s restore-status (True, 'offbox-restore', None, '')
|
||||
23:21:23 + 9.1s restore-status (False, 'offbox-restore', None, '')
|
||||
23:21:23 {"running": false, "op": "offbox-restore", "stack": "grimmory", "started_at": "2026-10-16T21:21:14.156589916Z", "last": {"op": "offbox-restore", "stack": "grimmory", "ok": true, "message": "A(z) grimmory teljes mentése visszaállítva ellenőrző mappába: /mnt/felhom-drives/hdd_1/backups/offsite-restore/grimmory — a saját fájljaiddal együtt. A meglévő adatok változatlanok.", "finished_at": "2026-10-16T21:21:22.333018655Z"}, "last_recent": true}
|
||||
23:21:23 POST /backup/offbox/reconstitute {'app': 'grimmory', 'confirm': '1'} -> HTTP/2 302 /backups/restore/app?name=grimmory&flash=flash.offbox.full_restore_started
|
||||
23:21:23 + 0.0s restore-status (True, 'offbox-reconstitute', None, '')
|
||||
23:22:17 + 54.5s restore-status (False, 'offbox-reconstitute', None, '')
|
||||
23:22:17 {"running": false, "op": "offbox-reconstitute", "stack": "grimmory", "started_at": "2026-10-16T21:21:23.276103566Z", "last": {"op": "offbox-reconstitute", "stack": "grimmory", "ok": true, "message": "A(z) grimmory: 2 fájl és 1 adatkötet és az adatbázis visszaállítva (mentés: 2026. 10. 16. 23:13) — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:22:15.633221727Z"}, "last_recent": true}
|
||||
23:23:02 check rallly: deployed=True state=running hold=None
|
||||
23:23:07 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:23:10 rallly log auth errors (10 min) / status: 0 | Up | 2 | minutes | (healthy)
|
||||
23:23:14 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:23:18 front door: 301
|
||||
|
||||
23:23:18 check grimmory: deployed=True state=running hold=None
|
||||
23:23:22 marker row: 'r1106-A2' (want 'r1106-A2' present)
|
||||
23:23:26 root login (the product's dump user): 1
|
||||
23:23:30 app user login (the app's own DB user): 1
|
||||
23:23:34 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:23:33.152578787","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:23:33.15260
|
||||
23:23:38 file: 50a1cfbcde9a13e801c30d3bd9f65457e3249704a3c925fe5e8d6baba886ea79 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-A2.txt
|
||||
23:24:08 seed rallly r1106-B: INSERT 0 1
|
||||
r1106-A2
|
||||
r1106-B
|
||||
23:24:13 seed grimmory r1106-B: r1106-A2
|
||||
r1106-B
|
||||
23:24:17 file: c90bc7913f76e3b72bd245b1f4f0b6c3b2be0a6de62bf95374eb47f62b9fb7cf /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-B.txt
|
||||
23:24:17 off-site before: status=ok last_run=2026-10-16T21:16:23Z snapshots=234
|
||||
23:24:17 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:24:17 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:27:10 + 172.5s ('running', '', 'opengist', 0) files 0/0 bytes /
|
||||
23:27:13 + 175.6s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
23:27:16 + 178.6s ('running', '', 'kimai', 0) files 0/0 bytes /
|
||||
23:27:19 + 181.6s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:27:22 + 184.6s ('running', '', 'prowlarr', 100) files 4/4 bytes 9.1 KB/9.1 KB
|
||||
23:27:25 + 187.7s ('running', '', 'romm', 0) files 0/0 bytes /
|
||||
23:27:28 + 190.7s ('running', '', 'sonarr', 0) files 0/0 bytes /
|
||||
23:27:31 + 193.7s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:27:34 + 196.8s ('running', '', 'rallly', 0) files 0/0 bytes /
|
||||
23:27:37 + 199.8s ('running', '', 'rallly', 100) files 8/8 bytes 67.0 MB/67.0 MB
|
||||
23:27:40 + 202.8s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
23:27:43 + 205.8s ('running', '', 'bookstack', 0) files 0/0 bytes /
|
||||
23:27:46 + 208.9s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:27:49 + 211.9s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
23:27:52 + 214.9s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:27:58 + 221.0s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:27:58 off-site after: status=ok last_run=2026-10-16T21:27:57Z duration=3m35s snapshots=250 size=687.5 MB error=''
|
||||
23:28:41 remove rallly (keepbackups: remove_hdd_data=True, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
23:29:15 remove grimmory (keepbackups: remove_hdd_data=True, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
23:29:19 household deletes the books-folder files: 3
|
||||
23:29:20 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:30:15 [1] deployed, controller state=running, pinned={'rallly': 'lukevella/rallly:4.15.3', 'rallly-postgres': 'postgres:18-alpine'}
|
||||
23:30:15 install rallly: True
|
||||
23:30:15 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:30:15 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:31:36 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:31:36 install grimmory: True
|
||||
23:31:36 check rallly: deployed=True state=running hold=None
|
||||
23:31:40 marker row: 'ERROR: relation "r1106_marker" does not exist\nLINE 1: select note from r1106_marker;\n ^' (want 'r1106-B' present)
|
||||
23:31:43 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
23:31:46 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:31:50 front door: 301
|
||||
|
||||
23:31:50 check grimmory: deployed=True state=running hold=None
|
||||
23:31:53 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-B' present)
|
||||
23:31:56 root login (the product's dump user): 1
|
||||
23:32:00 app user login (the app's own DB user): 1
|
||||
23:32:03 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:32:02.311256259","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:32:02.31127
|
||||
23:32:06 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-B.txt: No such file or directory
|
||||
23:32:06 [R] restoring rallly from snapshot 'helyi' (of 1 offered)
|
||||
23:32:06 [R] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
23:32:06 + 0.0s restore (True, None, None)
|
||||
23:32:34 + 28.3s restore (False, None, None)
|
||||
23:32:34 [R] after restore: state=running hold=None phase=None
|
||||
23:32:38 onbox restore: {"ok": true, "snapshot_id": "helyi", "http": "HTTP/2 302", "location": ["location: /backups/restore?flash=flash.restore.started"], "seconds": 28.4}
|
||||
23:32:38 restore-status: {"running": false, "op": "restore", "stack": "rallly", "started_at": "2026-10-16T21:32:06.602574836Z", "last": {"op": "restore", "stack": "rallly", "ok": true, "message": "A(z) rallly: 1 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:32:33.370797695Z"}, "last_recent": true}
|
||||
23:32:38 [R] restoring grimmory from snapshot 'helyi' (of 1 offered)
|
||||
23:33:18 [R] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+A+f%C3%A1jlok+a+t%C3%A1voli+m%C3%A1solatb%C3%B3l+%C3%A1ll%C3%ADthat%C3%B3k+vissza%3A+Biztons%C3%A1gi+ment%C3%A9s+%E2%86%92+Vissza%C3%A1ll%C3%ADt%C3%A1s%2C+%E2%80%9ETeljes+vissza%C3%A1ll%C3%ADt%C3%A1s+%28f%C3%A1jlok+%2B+adatb%C3%A1zis%29%E2%80%9D.']
|
||||
23:33:18 + 0.0s restore (False, None, None)
|
||||
23:33:25 [R] after restore: state=running hold=None phase=None
|
||||
23:33:28 onbox restore: {"ok": true, "snapshot_id": "helyi", "http": "HTTP/2 302", "location": ["location: /backups/restore?flash_error=Ez+a+ment%C3%A9s+nem+tartalmazza+az+alkalmaz%C3%A1s+f%C3%A1jljait%2C+ez%C3%A9rt+nem+%C3%A1ll%C3%ADtjuk+vissza+az+adatb%C3%A1zist+f%C3%B6l%C3%A9j%C3%BCk+%E2%80%94+a+f%C3%A1jlok+%C3%ADgy+a+hely%C3%BCk%C3%B6n+maradnak.+A+f%C3%A1jlok+a+t%C3%A1voli+m%C3%A1solatb%C3%B3l+%C3%A1ll%C3%ADthat%C3%B3k+vissza%3A+Biztons%C3%A1gi+ment%C3%A9s+%E2%86%92+Vissza%C3%A1ll%C3%ADt%C3%A1s%2C+%E2%80%9ETeljes+vissza%C3%A1ll%C3%ADt%C3%A1s+%28f%C3%A1jlok+%2B+adatb%C3%A1zis%29%E2%80%9D."], "seconds": 6.1}
|
||||
23:33:28 restore-status: {"running": false, "op": "restore", "stack": "rallly", "started_at": "2026-10-16T21:32:06.602574836Z", "last": {"op": "restore", "stack": "rallly", "ok": true, "message": "A(z) rallly: 1 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-10-16T21:32:33.370797695Z"}, "last_recent": true}
|
||||
23:34:14 check rallly: deployed=True state=running hold=None
|
||||
23:34:17 marker row: 'r1106-A2\nr1106-B' (want 'r1106-B' present)
|
||||
23:34:21 rallly log auth errors (10 min) / status: 0 | Up | About | a | minute | (healthy)
|
||||
23:34:24 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:34:27 front door: 301
|
||||
|
||||
23:34:27 check grimmory: deployed=True state=running hold=None
|
||||
23:34:31 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-B' present)
|
||||
23:34:34 root login (the product's dump user): 1
|
||||
23:34:37 app user login (the app's own DB user): 1
|
||||
23:34:40 app health: Up 3 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:34:39.959127823","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:34:39.95916
|
||||
23:34:44 file: sha256sum: /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-B.txt: No such file or directory
|
||||
23:35:13 [R] restoring rallly from snapshot 'helyi' (of 1 offered)
|
||||
23:35:13 [R] POST /backup/restore -> HTTP/2 302 ['location: /backups/restore?flash=flash.restore.started']
|
||||
23:35:13 + 0.0s restore (False, None, None)
|
||||
23:35:19 [R] after restore: state=running hold=None phase=None
|
||||
23:35:22 onbox restore: {"ok": true, "snapshot_id": "helyi", "http": "HTTP/2 302", "location": ["location: /backups/restore?flash=flash.restore.started"], "seconds": 6.1}
|
||||
23:35:22 restore-status: {"running": false, "op": "restore", "stack": "rallly", "started_at": "2026-10-16T21:35:13.244020136Z", "last": {"op": "restore", "stack": "rallly", "ok": false, "message": "Visszaállítás sikertelen: Ezt a mentést nem lehet visszaállítani: nem tartalmazza az adatbázis jelszavát, és nélküle az alkalmazás nem tudna elindulni. A mostani telepítés érintetlen maradt.", "finished_at": "2026-10-16T21:35:13.253731205Z"}, "last_recent": true}
|
||||
23:35:42 check rallly: deployed=True state=running hold=None
|
||||
23:35:46 marker row: 'r1106-A2\nr1106-B' (want 'r1106-B' present)
|
||||
23:35:49 rallly log auth errors (10 min) / status: 0 | Up | 3 | minutes | (healthy)
|
||||
23:35:52 app login to its DB (the app's own DATABASE_URL user): 1
|
||||
23:35:55 front door: 301
|
||||
|
||||
23:36:10 seed grimmory r1106-D: r1106-D
|
||||
23:36:13 file: b9a6247e71922dce28dfccaabaebee528e89f125052cb799ea3e8ba2bd579b9e /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D.txt
|
||||
23:36:13 check grimmory: deployed=True state=running hold=None
|
||||
23:36:16 marker row: 'r1106-D' (want 'r1106-D' present)
|
||||
23:36:19 root login (the product's dump user): 1
|
||||
23:36:23 app user login (the app's own DB user): 1
|
||||
23:36:26 app health: Up 5 minutes (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:36:25.554584861","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:36:25.55460
|
||||
23:36:29 file: b9a6247e71922dce28dfccaabaebee528e89f125052cb799ea3e8ba2bd579b9e /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D.txt
|
||||
23:36:29 off-site before: status=ok last_run=2026-10-16T21:27:57Z snapshots=250
|
||||
23:36:29 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:36:30 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:39:07 + 157.3s ('running', '', 'grimmory', 0) files 0/0 bytes /
|
||||
23:39:10 + 160.4s ('running', '', 'bookstack', 0) files 0/0 bytes /
|
||||
23:39:13 + 163.4s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:39:16 + 166.4s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
23:39:19 + 169.4s ('running', '', 'home-assistant', 100) files 6/6 bytes 12.7 MB/12.7 MB
|
||||
23:39:22 + 172.5s ('running', '', 'opengist', 0) files 0/0 bytes /
|
||||
23:39:25 + 175.5s ('running', '', 'paperless-ngx', 100) files 74/74 bytes 154.1 MB/154.1 MB
|
||||
23:39:28 + 178.5s ('running', '', 'docmost', 100) files 12/12 bytes 105.1 MB/105.1 MB
|
||||
23:39:31 + 181.5s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:39:34 + 184.6s ('running', '', 'prowlarr', 0) files 0/0 bytes /
|
||||
23:39:37 + 187.6s ('running', '', 'romm', 0) files 0/0 bytes /
|
||||
23:39:40 + 190.6s ('running', '', 'romm', 100) files 10/10 bytes 189.8 MB/189.8 MB
|
||||
23:39:43 + 193.6s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:39:46 + 196.7s ('running', '', 'privatebin', 0) files 0/0 bytes /
|
||||
23:39:49 + 199.7s ('running', '', 'rallly', 100) files 8/8 bytes 67.5 MB/67.5 MB
|
||||
23:39:52 + 202.7s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:39:58 + 208.8s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:39:58 off-site after: status=ok last_run=2026-10-16T21:39:56Z duration=3m23s snapshots=266 size=704.6 MB error=''
|
||||
23:40:32 remove grimmory (keepdata: remove_hdd_data=False, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (4.0K)'], 'us
|
||||
23:40:33 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:40:34 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
|
||||
23:41:59 [1] deployed, controller state=running, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:41:59 install grimmory with kept_data=use: True
|
||||
23:42:29 check grimmory: deployed=True state=running hold=None
|
||||
23:42:33 marker row: "--------------\n\nERROR 1146 (42S02) at line 1: Table 'grimmory.r1106_marker' doesn't exist" (want 'r1106-D' present)
|
||||
23:42:36 root login (the product's dump user): 1
|
||||
23:42:39 app user login (the app's own DB user): 1
|
||||
23:42:43 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:42:42.23419292","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:42:42.234213
|
||||
23:42:46 file: b9a6247e71922dce28dfccaabaebee528e89f125052cb799ea3e8ba2bd579b9e /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D.txt
|
||||
23:43:14 seed grimmory r1106-D2: r1106-D2
|
||||
23:43:17 file: a584aeaa731c68ace4355bbcffa492f6f578af38c12142ff943aeb2880564ab0 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D2.txt
|
||||
23:43:18 off-site before: status=ok last_run=2026-10-16T21:39:56Z snapshots=266
|
||||
23:43:18 POST /backup/offbox/run {} -> HTTP/2 302 /backups/remote?flash=flash.offbox.run_started
|
||||
23:43:18 + 0.0s ('running', 'dump', '', 0) files 0/0 bytes /
|
||||
23:45:52 + 154.3s ('running', '', 'calibre-web', 0) files 0/0 bytes /
|
||||
23:45:55 + 157.3s ('running', '', 'home-assistant', 0) files 0/0 bytes /
|
||||
23:45:58 + 160.4s ('running', '', 'opengist', 0) files 0/0 bytes /
|
||||
23:46:01 + 163.4s ('running', '', 'paperless-ngx', 28) files 70/74 bytes 42.6 MB/154.2 MB
|
||||
23:46:04 + 166.4s ('running', '', 'docmost', 0) files 0/0 bytes /
|
||||
23:46:07 + 169.4s ('running', '', 'plex', 0) files 0/0 bytes /
|
||||
23:46:10 + 172.5s ('running', '', 'prowlarr', 0) files 0/0 bytes /
|
||||
23:46:13 + 175.5s ('running', '', 'radarr', 0) files 0/0 bytes /
|
||||
23:46:16 + 178.5s ('running', '', 'romm', 100) files 10/10 bytes 190.0 MB/190.0 MB
|
||||
23:46:19 + 181.5s ('running', '', 'bentopdf', 0) files 0/0 bytes /
|
||||
23:46:22 + 184.6s ('running', '', 'privatebin', 0) files 0/0 bytes /
|
||||
23:46:25 + 187.6s ('running', '', 'rallly', 100) files 8/8 bytes 67.5 MB/67.5 MB
|
||||
23:46:28 + 190.6s ('running', '', 'grimmory', 100) files 11/11 bytes 156.9 MB/156.9 MB
|
||||
23:46:31 + 193.6s ('running', 'retention', '', 0) files 0/0 bytes /
|
||||
23:46:37 + 199.7s ('ok', '', '', 0) files 0/0 bytes /
|
||||
23:46:37 off-site after: status=ok last_run=2026-10-16T21:46:35Z duration=3m13s snapshots=282 size=719.2 MB error=''
|
||||
23:47:11 remove grimmory (keepdata: remove_hdd_data=False, remove_backups=False) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': [], 'hdd_paths_preserved': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (8.0K)'], 'us
|
||||
23:47:11 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH']
|
||||
23:47:13 [1] deploy -> 202 {'ok': True, 'message': 'A(z) Grimmory megőrzött adatainak betöltése elindult.'}
|
||||
23:47:38 [1] deployed, controller state=unhealthy, pinned={'grimmory': 'ghcr.io/grimmory-tools/grimmory:v3.5.0', 'grimmory-db': 'mariadb:11.4'}
|
||||
23:47:38 [1] NOTE: the controller's own state is 'unhealthy', not 'running' — recorded, not treated as a failure; the fixture's front-door wait is the real gate
|
||||
23:47:38 install grimmory with kept_data=use: True
|
||||
23:48:40 check grimmory: deployed=True state=running hold=None
|
||||
23:48:43 marker row: 'r1106-D2' (want 'r1106-D2' present)
|
||||
23:48:47 root login (the product's dump user): 1
|
||||
23:48:50 app user login (the app's own DB user): 1
|
||||
23:48:53 app health: Up About a minute (healthy)
|
||||
{"data":{"status":"UP","message":"Application is running smoothly.","timestamp":"2026-10-16T23:48:52.592861758","version":"v3.5.0"},"message":"Pong","status":200,"timestamp":"2026-10-16T23:48:52.59288
|
||||
23:48:56 file: a584aeaa731c68ace4355bbcffa492f6f578af38c12142ff943aeb2880564ab0 /mnt/felhom-drives/hdd_1/userdata/media/grimmory/r1106-D2.txt
|
||||
23:54:12 remove rallly (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'rallly', 'volumes_removed': ['rallly_rallly_postgres_data'], 'hdd_paths_removed': [], 'hdd_paths_preserved': [], 'hdd_note': 'Az alkalmazás nem tárolt saját adatot kü
|
||||
23:54:46 remove grimmory (all: remove_hdd_data=True, remove_backups=True) -> 200 {'ok': True, 'data': {'removed': 'grimmory', 'volumes_removed': ['grimmory_grimmory_db'], 'hdd_paths_removed': ['/mnt/felhom-drives/hdd_1/appdata/grimmory/data (8.0K)'], 'hdd_paths_preserved': [], 'us
|
||||
23:54:49 household deletes the books-folder files: 2
|
||||
@@ -0,0 +1,5 @@
|
||||
snapshots: 0.14.0-made f3f16e0e (bookstack), 0.18.1-made 6d9dd607 (rallly), 0.19.1-made fd048a06 (bookstack, newest)
|
||||
f3f16e0e: restic 0.14.0 → 0929043ef22edf09 (11 files) restic 0.18.1 → 0929043ef22edf09 (11 files) restic 0.19.1 → 0929043ef22edf09 (11 files)
|
||||
6d9dd607: restic 0.14.0 → 8008e687404bd9a7 (7 files) restic 0.18.1 → 8008e687404bd9a7 (7 files) restic 0.19.1 → 8008e687404bd9a7 (7 files)
|
||||
fd048a06: restic 0.14.0 → 1567422ecd060fbb (11 files) restic 0.18.1 → 1567422ecd060fbb (11 files) restic 0.19.1 → 1567422ecd060fbb (11 files)
|
||||
store listed by each: 0.14.0=234 0.18.1=234 0.19.1=234
|
||||
@@ -0,0 +1 @@
|
||||
rc=0
|
||||
+561
@@ -0,0 +1,561 @@
|
||||
Applying Policy: keep 7 daily, 4 weekly, 6 monthly snapshots
|
||||
keep 14 snapshots:
|
||||
ID Time Host Tags Reasons Paths
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
8f70dd2d 2026-05-31 02:30:00 box a,felhom-offbox monthly snapshot <W>/src/a
|
||||
e5685e89 2026-06-30 14:10:00 box a,felhom-offbox monthly snapshot <W>/src/a
|
||||
48fcf709 2026-07-31 02:30:00 box a,felhom-offbox monthly snapshot <W>/src/a
|
||||
9cec0dfb 2026-08-31 02:30:00 box a,felhom-offbox monthly snapshot <W>/src/a
|
||||
8d8b6744 2026-09-27 02:30:00 box a,felhom-offbox weekly snapshot <W>/src/a
|
||||
60e75e0a 2026-09-30 02:30:00 box a,felhom-offbox monthly snapshot <W>/src/a
|
||||
8f26ea70 2026-10-04 02:30:00 box a,felhom-offbox weekly snapshot <W>/src/a
|
||||
3f469a9f 2026-10-10 02:30:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
64ab4ec2 2026-10-11 02:30:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
weekly snapshot
|
||||
60a96942 2026-10-12 02:30:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
a15f14a3 2026-10-13 02:30:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
d5a6f655 2026-10-14 02:30:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
666514eb 2026-10-15 02:30:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
09367c72 2026-10-16 14:10:00 box a,felhom-offbox daily snapshot <W>/src/a
|
||||
weekly snapshot
|
||||
monthly snapshot
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Timestamps shown in UTC
|
||||
14 snapshots
|
||||
|
||||
remove 243 snapshots:
|
||||
ID Time Host Tags Paths
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
771de67e 2026-02-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6dd387ac 2026-03-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
1e07d089 2026-03-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ff409d60 2026-03-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
e40a98b5 2026-03-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
1c44dfba 2026-03-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
72974001 2026-03-05 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
d4419552 2026-03-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0f19842b 2026-03-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
489ee511 2026-03-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
87a1ebb8 2026-03-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a405062a 2026-03-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7547886f 2026-03-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
255407da 2026-03-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
96c9161e 2026-03-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
993bcf63 2026-03-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
43e3394d 2026-03-14 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
a8985a5f 2026-03-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
85f15ec0 2026-03-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7057b877 2026-03-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
e9fac77a 2026-03-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
131c441a 2026-03-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
8324988f 2026-03-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d1e609c0 2026-03-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
442ebff9 2026-03-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0e2fa801 2026-03-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
767ab4e3 2026-03-23 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
33137cc5 2026-03-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3e8a2c5a 2026-03-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
053d36f8 2026-03-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f47d2804 2026-03-27 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7685b131 2026-03-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
962b5504 2026-03-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7890ed38 2026-03-30 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3b108715 2026-03-31 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3a958277 2026-04-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
cd7aba44 2026-04-01 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
681b0d03 2026-04-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d4d72cf7 2026-04-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2b02c165 2026-04-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4ca97426 2026-04-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b9e29684 2026-04-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d571e1bb 2026-04-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ae53fc44 2026-04-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
5deeec58 2026-04-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
97ee4d90 2026-04-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
608267b5 2026-04-10 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
711776df 2026-04-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
21f7f406 2026-04-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
21418f80 2026-04-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f39bbb32 2026-04-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a484fc5e 2026-04-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
c917f1da 2026-04-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
38b2529a 2026-04-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
15bd7c6f 2026-04-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
bc987be4 2026-04-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
907a9646 2026-04-19 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
f36759fb 2026-04-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
86e604e7 2026-04-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
208bf342 2026-04-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
9e65ba46 2026-04-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
38c1f3e4 2026-04-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4ad7e0ad 2026-04-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2835c7d4 2026-04-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b34dc0c9 2026-04-27 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2e47ed5d 2026-04-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
37863bf3 2026-04-28 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
0dfcdf46 2026-04-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
256e43e6 2026-04-30 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6cf6cb2c 2026-05-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
125d79cb 2026-05-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
43a78ef7 2026-05-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
fc826c25 2026-05-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4aec4215 2026-05-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
75bdd2d8 2026-05-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2b90ac52 2026-05-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d5b8c85b 2026-05-07 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
efff3a99 2026-05-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ca6478bb 2026-05-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b99c0056 2026-05-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
47f0537b 2026-05-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
36f9ebf9 2026-05-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
1a1c6121 2026-05-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
eed37ee7 2026-05-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
9e50d9dd 2026-05-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
123f3b9a 2026-05-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2ff01eae 2026-05-16 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
acbb7fe6 2026-05-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f20f3fc4 2026-05-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
497de3c8 2026-05-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
c36d44cf 2026-05-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
05171c35 2026-05-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ed9ab1fe 2026-05-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2e4e8278 2026-05-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7570e58e 2026-05-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d1761e38 2026-05-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d54f9281 2026-05-25 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
c1b802c4 2026-05-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d6502728 2026-05-27 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
9ea083d0 2026-05-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a2d178ee 2026-05-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
8885d6ac 2026-05-30 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7088f0cc 2026-06-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
db51dbc5 2026-06-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
c42cb86a 2026-06-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
1f7fad88 2026-06-03 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
fcd28986 2026-06-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
588b64a8 2026-06-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
caee2672 2026-06-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
48908f97 2026-06-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7c5b5505 2026-06-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4f849183 2026-06-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
28307a76 2026-06-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
c9182c36 2026-06-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
48d17034 2026-06-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a0c476e1 2026-06-12 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
37940620 2026-06-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b0240087 2026-06-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
573fbae8 2026-06-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
5e759a21 2026-06-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
cf724e77 2026-06-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4b118972 2026-06-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f8793dc2 2026-06-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0f16b002 2026-06-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
11be0ee3 2026-06-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
df2cd6a0 2026-06-21 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
45b73f82 2026-06-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
1deb37d6 2026-06-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a28a97b2 2026-06-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
fd399042 2026-06-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
902bbc6e 2026-06-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6b994fb0 2026-06-27 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4841074f 2026-06-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0757e64a 2026-06-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
37fadb18 2026-06-30 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7aae1393 2026-07-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
dcc3ec41 2026-07-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
c8f6eb05 2026-07-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
e2bf3420 2026-07-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ab10a3bb 2026-07-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
77072eae 2026-07-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6a6b4e52 2026-07-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
e7232f1d 2026-07-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
57f98a04 2026-07-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
454fe67a 2026-07-09 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
6bf3bb2f 2026-07-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
22a6f643 2026-07-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4c584c3c 2026-07-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6b212603 2026-07-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
bea3a812 2026-07-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
e6bace4c 2026-07-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
77d4182e 2026-07-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
63bcd85b 2026-07-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3b1a43dc 2026-07-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0bc845a4 2026-07-18 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
18a865dc 2026-07-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ba7ff236 2026-07-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3acec8c9 2026-07-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
fd032617 2026-07-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
fa6d63e1 2026-07-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
69f6bb28 2026-07-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
69dba03f 2026-07-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
85128e1a 2026-07-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
64bb4c3f 2026-07-27 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2ec9bd3e 2026-07-27 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
d0dad73a 2026-07-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
5a9303b6 2026-07-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
055989d8 2026-07-30 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
fead4fb4 2026-08-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4a1fd03b 2026-08-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b76bbe6b 2026-08-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3fc058ca 2026-08-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
809fbefd 2026-08-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
034515e1 2026-08-05 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
dfbe7317 2026-08-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
871d237a 2026-08-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ee702f60 2026-08-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
efbae105 2026-08-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f2dccbdc 2026-08-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
034f04d0 2026-08-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
cfcc9376 2026-08-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2c8fbc96 2026-08-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
16e7c50a 2026-08-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
5b178039 2026-08-14 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
8b5e7881 2026-08-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
48129420 2026-08-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
cbace118 2026-08-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
5041239e 2026-08-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f0001b70 2026-08-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
35511892 2026-08-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a25ddedb 2026-08-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
83b7a7bb 2026-08-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d3606ba9 2026-08-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a8caee32 2026-08-23 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
31d6b8f7 2026-08-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
cac533c3 2026-08-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
f50266af 2026-08-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3ff86b96 2026-08-27 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
533e5a7d 2026-08-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ed6d22d5 2026-08-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
37b9d011 2026-08-30 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b5a1a0ac 2026-09-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
b4b57fc7 2026-09-01 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
d04c4116 2026-09-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
02b2f992 2026-09-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6dab8693 2026-09-04 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
36acac77 2026-09-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
06eb52f2 2026-09-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
8cdd6ceb 2026-09-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
cd407456 2026-09-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
ea01bb40 2026-09-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
95c7e048 2026-09-10 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0afaee19 2026-09-10 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
265703f3 2026-09-11 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d7010979 2026-09-12 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
36341c94 2026-09-13 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
2fe66096 2026-09-14 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
eff9c539 2026-09-15 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
5037d619 2026-09-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
13362fe8 2026-09-17 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
7bc717c3 2026-09-18 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3a0162bd 2026-09-19 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0629599b 2026-09-19 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
338bb83f 2026-09-20 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6ef1247b 2026-09-21 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
0e9f2fd3 2026-09-22 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
e391dae4 2026-09-23 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
67f9dbb1 2026-09-24 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
3a93ae89 2026-09-25 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
60dabff3 2026-09-26 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
504c5bd6 2026-09-28 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
357c7267 2026-09-28 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
4391b722 2026-09-29 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
488452f5 2026-10-01 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
52995377 2026-10-02 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d92eafc1 2026-10-03 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
d4947064 2026-10-05 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
c9460062 2026-10-06 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
a3363dc9 2026-10-07 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
268dc8f4 2026-10-07 14:10:00 box a,felhom-offbox <W>/src/a
|
||||
fea94d1c 2026-10-08 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
4fbbc2b9 2026-10-09 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
6479bd91 2026-10-16 02:30:00 box a,felhom-offbox <W>/src/a
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Timestamps shown in UTC
|
||||
243 snapshots
|
||||
|
||||
keep 14 snapshots:
|
||||
ID Time Host Tags Reasons Paths
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
36accea8 2026-05-31 02:30:00 box b,felhom-offbox monthly snapshot <W>/src/b
|
||||
e82153e3 2026-06-30 02:30:00 box b,felhom-offbox monthly snapshot <W>/src/b
|
||||
7db7628f 2026-07-31 02:30:00 box b,felhom-offbox monthly snapshot <W>/src/b
|
||||
96548538 2026-08-31 02:30:00 box b,felhom-offbox monthly snapshot <W>/src/b
|
||||
3c827e18 2026-09-27 02:30:00 box b,felhom-offbox weekly snapshot <W>/src/b
|
||||
b7a6d53e 2026-09-30 02:30:00 box b,felhom-offbox monthly snapshot <W>/src/b
|
||||
f8ab7abd 2026-10-04 02:30:00 box b,felhom-offbox weekly snapshot <W>/src/b
|
||||
dd10b8c4 2026-10-10 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
b7b3a5e5 2026-10-11 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
weekly snapshot
|
||||
9727e882 2026-10-12 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
d79e9f8f 2026-10-13 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
9f0146b2 2026-10-14 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
304b8e9e 2026-10-15 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
d76b401f 2026-10-16 02:30:00 box b,felhom-offbox daily snapshot <W>/src/b
|
||||
weekly snapshot
|
||||
monthly snapshot
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Timestamps shown in UTC
|
||||
14 snapshots
|
||||
|
||||
remove 231 snapshots:
|
||||
ID Time Host Tags Paths
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
6a402dc0 2026-02-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
beb44caf 2026-03-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
66ac8d3c 2026-03-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d4722099 2026-03-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
dc4433db 2026-03-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
917dca0d 2026-03-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4a98db6a 2026-03-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d46839d3 2026-03-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d22b6a34 2026-03-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b8f477ee 2026-03-08 23:40:00 box b,felhom-offbox <W>/src/b
|
||||
db8f3f50 2026-03-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
bff6bc4a 2026-03-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d9427e12 2026-03-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9d487b80 2026-03-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
95eaac16 2026-03-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d003ea92 2026-03-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c08f7015 2026-03-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
0239cfc4 2026-03-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
6496efdd 2026-03-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5369ad4a 2026-03-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ecce625b 2026-03-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a9891d86 2026-03-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4d4a77f1 2026-03-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c7c9eaa7 2026-03-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
24143eb5 2026-03-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
55613027 2026-03-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c1d613e6 2026-03-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c3e44c0b 2026-03-25 23:40:00 box b,felhom-offbox <W>/src/b
|
||||
b11a66ef 2026-03-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
8fbe9d3b 2026-03-27 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
6c9df060 2026-03-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d9084464 2026-03-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e41f49b6 2026-03-30 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
2c2da14e 2026-03-31 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ed46e7f4 2026-04-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c7c247ee 2026-04-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c639f637 2026-04-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b54b9eeb 2026-04-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4a91df7b 2026-04-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
da8ace42 2026-04-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3661cf00 2026-04-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
12506e4b 2026-04-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ca81d3bf 2026-04-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
cb4ac262 2026-04-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
6b191a1b 2026-04-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7c5da2c1 2026-04-11 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
50829770 2026-04-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9d4de4d0 2026-04-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9940ffa2 2026-04-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
fc26f5c2 2026-04-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7e86073f 2026-04-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
f33c694b 2026-04-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
055bd980 2026-04-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a5b7c6ee 2026-04-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
12acc17d 2026-04-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e2412763 2026-04-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
cbe3e534 2026-04-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
04fec27c 2026-04-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
f2c51703 2026-04-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a2fc8669 2026-04-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
efac66aa 2026-04-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
24be8a0a 2026-04-27 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7d9e6ac5 2026-04-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
6d1bfcbf 2026-04-28 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
b7570692 2026-04-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7859f130 2026-04-30 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5501314e 2026-05-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
852384d0 2026-05-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
1a806311 2026-05-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
22050be5 2026-05-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d2bf9a42 2026-05-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ca8c2f85 2026-05-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
26b220be 2026-05-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
506491f2 2026-05-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
688189a0 2026-05-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ecaac318 2026-05-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e0b9a354 2026-05-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e2a52b54 2026-05-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3ec096df 2026-05-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e9738d4d 2026-05-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
052e0896 2026-05-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
84b7a47d 2026-05-15 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
7583f66d 2026-05-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
058d5813 2026-05-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
cbbe7dd1 2026-05-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b1cb0174 2026-05-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
54cf284e 2026-05-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b3e53f97 2026-05-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
76846bd0 2026-05-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3c3c3196 2026-05-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7a099ec5 2026-05-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3f2d9830 2026-05-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4f18917e 2026-05-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
04df6307 2026-05-27 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
10afba47 2026-05-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
f50ed158 2026-05-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
0ba92ebe 2026-05-30 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
2facd99e 2026-06-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
1084e6fd 2026-06-01 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
8f4863ec 2026-06-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
20c5e566 2026-06-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
aa1fe73c 2026-06-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b259befd 2026-06-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b361cc39 2026-06-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a9fe08a7 2026-06-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
03a3a73c 2026-06-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
236e0f4c 2026-06-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a4dc8756 2026-06-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
468c771f 2026-06-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c14384d3 2026-06-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
31486f77 2026-06-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ae3b14ac 2026-06-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a24c3aa1 2026-06-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
bc3c78db 2026-06-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
2ad5af51 2026-06-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
2680ffc7 2026-06-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
2c424261 2026-06-18 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
bd97943b 2026-06-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b825d642 2026-06-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d417005e 2026-06-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9940af16 2026-06-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5f309e2c 2026-06-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
f71f4a3b 2026-06-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
8308f20d 2026-06-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
394d9ceb 2026-06-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
eec81a2c 2026-06-27 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
1d2ea3fe 2026-06-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3c5d64c0 2026-06-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
42068a48 2026-07-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
0e911cf9 2026-07-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c0e5084c 2026-07-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
93940831 2026-07-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4e6adc60 2026-07-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
03ee4458 2026-07-05 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
230bd9ae 2026-07-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
8b257ab2 2026-07-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
703c6fd9 2026-07-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c9a36d5c 2026-07-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
14f21efd 2026-07-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c970ed6f 2026-07-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
57f5c22e 2026-07-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
43b23661 2026-07-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
13c2ac05 2026-07-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a9b8e21c 2026-07-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b7830a8a 2026-07-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b2bda3c4 2026-07-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
54ec14ca 2026-07-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
688c5e87 2026-07-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
fe60b55b 2026-07-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
8410e869 2026-07-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4e33c281 2026-07-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7f924a70 2026-07-22 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
11020603 2026-07-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
82d8cc6d 2026-07-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
30645b80 2026-07-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
00ba72b7 2026-07-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d0f27361 2026-07-27 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
817beade 2026-07-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
be12d398 2026-07-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
88543a7f 2026-07-30 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7e766bfd 2026-08-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
104fda2d 2026-08-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d4a3ead0 2026-08-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
79d589c5 2026-08-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7a23ddd0 2026-08-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
694583af 2026-08-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
07905789 2026-08-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
66eb1cea 2026-08-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
da6fecd2 2026-08-08 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
876812a8 2026-08-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3d88252f 2026-08-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
475b1897 2026-08-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4bc78500 2026-08-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
0c015408 2026-08-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
62346cc4 2026-08-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a8695b01 2026-08-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c081b4c3 2026-08-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
05191842 2026-08-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
fc548112 2026-08-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
bd460956 2026-08-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e9f8dccc 2026-08-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
84eb1974 2026-08-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
c1f9df12 2026-08-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
f1a8340a 2026-08-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
ba65914b 2026-08-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9dfa74cb 2026-08-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9da83081 2026-08-25 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
1a74877e 2026-08-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d46ac7a8 2026-08-27 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d28f0225 2026-08-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b20ddf0c 2026-08-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
566e708b 2026-08-30 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5e77a4b4 2026-09-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e57521de 2026-09-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d4c9a9be 2026-09-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5aa997a3 2026-09-04 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
eb221b8b 2026-09-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
6de4d01b 2026-09-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7a54ac59 2026-09-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
8a9f46fc 2026-09-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e381761e 2026-09-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9ea9a862 2026-09-10 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
e37779c4 2026-09-11 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5a50be81 2026-09-11 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
8619c49a 2026-09-12 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
fafb42b7 2026-09-13 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
dce8f22f 2026-09-14 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
1c324ca6 2026-09-15 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
9c7d21c8 2026-09-16 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
beb3becb 2026-09-17 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
1c2538d2 2026-09-18 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
797667df 2026-09-19 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
b036fb39 2026-09-20 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
52617b0f 2026-09-21 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
0fb2da28 2026-09-22 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4cfb09bd 2026-09-23 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
a39ced85 2026-09-24 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
015979f0 2026-09-25 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3abe3ef9 2026-09-26 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
7033fff6 2026-09-28 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
d85ee2c6 2026-09-28 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
5629a380 2026-09-29 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
544613c7 2026-10-01 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
54b5463c 2026-10-02 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
3fa9ba77 2026-10-03 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
5d0405f0 2026-10-05 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
4c51d9f0 2026-10-06 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
0f19d9b7 2026-10-07 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
338aeaae 2026-10-08 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
840009d1 2026-10-09 02:30:00 box b,felhom-offbox <W>/src/b
|
||||
67143204 2026-10-15 22:40:00 box b,felhom-offbox <W>/src/b
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
Timestamps shown in UTC
|
||||
231 snapshots
|
||||
|
||||
[0:00] 100.00% 474 / 474 files deleted
|
||||
474 snapshots have been removed, running prune
|
||||
loading all snapshots...
|
||||
finding data that is still in use for 28 snapshots
|
||||
[0:00] 100.00% 28 / 28 snapshots
|
||||
searching used packs...
|
||||
collecting packs for deletion and repacking
|
||||
[0:00] 100.00% 964 / 964 packs processed
|
||||
|
||||
to repack: 310 blobs / 86.833 KiB
|
||||
this removes: 2 blobs / 486 B
|
||||
to delete: 4938 blobs / 1.129 MiB
|
||||
total prune: 4940 blobs / 1.129 MiB
|
||||
remaining: 308 blobs / 71.907 KiB
|
||||
unused size after prune: 0 B (0.00% of remaining size)
|
||||
|
||||
repacking packs
|
||||
[0:00] 100.00% 58 / 58 packs repacked
|
||||
rebuilding index
|
||||
[0:00] 100.00% 503 / 503 indexes processed
|
||||
[0:00] 100.00% 503 / 503 old indexes deleted
|
||||
removing 964 old packs
|
||||
[0:00] 100.00% 964 / 964 files deleted
|
||||
done
|
||||
+1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
snapshots made by 0.14.0: 502
|
||||
plan-0.14.0-Europe_Budapest.json: remove 474 keep 28 — identical to 0.14.0/UTC: True
|
||||
plan-0.14.0-UTC.json: remove 474 keep 28 — identical to 0.14.0/UTC: True
|
||||
plan-0.19.1-Europe_Budapest.json: remove 474 keep 28 — identical to 0.14.0/UTC: True
|
||||
plan-0.19.1-UTC.json: remove 474 keep 28 — identical to 0.14.0/UTC: True
|
||||
after 0.19.1 forget --prune + a 0.19.1 backup:
|
||||
0.14.0 lists: 29
|
||||
0.19.1 lists: 29
|
||||
0.14.0 check --read-data rc=0 (no errors were found)
|
||||
0.14.0 restores the 0.19.1 snapshot: rc=0 content=f-new
|
||||
0.19.1 restores a 0.14.0 snapshot (09367c72): rc=0 content=2026-10-16 a
|
||||
@@ -0,0 +1,6 @@
|
||||
trivy 0.74.0, felhom-controller:0.324.0-rc.1 (critical/high, fixable in brackets)
|
||||
gitea.dooplex.hu/admin/felhom-controller:0.324.0-rc.1 (debia crit 1 (0) high 70 (0)
|
||||
usr/libexec/docker/cli-plugins/docker-compose crit 0 (0) high 4 (4) ['golang.org/x/net@v0.58.0', 'stdlib@v1.26.8']
|
||||
usr/local/bin/restic crit 0 (0) high 19 (19) ['golang.org/x/crypto@v0.52.0', 'golang.org/x/net@v0.55.0', 'golang.org/x/text@v0.37.0', 'google.golang.org/grpc@v1.81.1', 'stdlib@v1.26.4']
|
||||
TOTAL crit 1 (0) high 93 (23)
|
||||
before (0.323.0 = restic 0.18.1): crit 3 (2) high 122 (52), of which restic 2 (2) / 48 (48)
|
||||
@@ -0,0 +1,5 @@
|
||||
23:24:26 POST /sharing/enable {'enabled': 'on', 'server_name': 'FELHOMHP'} -> HTTP/2 303 /sharing?flash=flash.sharing.saved_preparing
|
||||
23:24:26 POST /sharing/shares {'name': 'r1108', 'mode': 'new', 'storage_root': '/mnt/felhom-drives/hdd_1'} -> HTTP/2 303 /sharing?flash=flash.sharing.created
|
||||
23:24:27 POST /sharing/password (value not shown) -> location: /sharing?flash=flash.sharing.pw_set_preparing
|
||||
23:25:07 POST /sharing/shares/delete {'name': 'r1108'} -> HTTP/2 303 /sharing?flash=flash.sharing.deleted
|
||||
23:25:07 POST /sharing/enable {'enabled': 'off', 'server_name': 'FELHOMHP'} -> HTTP/2 303 /sharing?flash=flash.sharing.disabled
|
||||
@@ -0,0 +1,17 @@
|
||||
== r1108-live — 2026-10-16T21:24:47Z
|
||||
-- 1. smbclient with the household password: write, list, read back, delete
|
||||
putting file /tmp/probe.txt as \probe-r1108-live.txt (2.8 kB/s) (average 2.8 kB/s)
|
||||
probe-r1108-live.txt A 17 Fri Oct 16 21:24:47 2026
|
||||
getting file \probe-r1108-live.txt of size 17 as /tmp/back.txt (16.6 KiloBytes/sec) (average 16.6 KiloBytes/sec)
|
||||
read back: r1105-r1108-live
|
||||
-- 2. negative control: a wrong password
|
||||
session setup failed: NT_STATUS_LOGON_FAILURE
|
||||
-- 3. nmbd: NetBIOS name query from DooPlex
|
||||
192.168.0.155 FELHOMHP<00>
|
||||
-- 4. avahi: mDNS A query for FELHOMHP.local
|
||||
answer from 192.168.0.155: 192.168.0.155 for felhomhp.local
|
||||
-- 5. wsdd: WS-Discovery Probe
|
||||
ProbeMatches from: ['192.168.0.110', '192.168.0.155'] — the box (192.168.0.155) answered
|
||||
rmdir: removing directory, '/mnt/felhom-drives/hdd_1/shares/r1108'
|
||||
rmdir: removing directory, '/mnt/felhom-drives/hdd_1/shares'
|
||||
0
|
||||
@@ -0,0 +1,80 @@
|
||||
rm: cannot remove '/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/audits/night-restore-2026-10-17/P4/browser/.profile/Default': Directory not empty
|
||||
{
|
||||
"1_sign_in_lands_on": "/launcher",
|
||||
"2_headers": {
|
||||
"status": 200,
|
||||
"xfo": "DENY",
|
||||
"csp": "frame-ancestors 'none'"
|
||||
},
|
||||
"3_signout_control": {
|
||||
"method": "post",
|
||||
"hasCsrf": true
|
||||
},
|
||||
"4_after_signout": "/login",
|
||||
"5_launcher_after_signout": "/login",
|
||||
"6_sign_in_again": "/launcher",
|
||||
"7_app grimmory-r1106.enkisfelhom.hu": {
|
||||
"host": "grimmory-r1106.enkisfelhom.hu",
|
||||
"path": "/setup",
|
||||
"title": "Grimmory",
|
||||
"gatePage": false
|
||||
},
|
||||
"7_app rallly-r1106.enkisfelhom.hu": {
|
||||
"host": "rallly-r1106.enkisfelhom.hu",
|
||||
"path": "/login",
|
||||
"title": "Login",
|
||||
"gatePage": false
|
||||
},
|
||||
"console": [
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/adventurelog-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/kimai-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/privatebin-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/opengist-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/docmost-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/docmost-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/kimai-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/opengist-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/privatebin-logo.svg"
|
||||
],
|
||||
[
|
||||
"log-error",
|
||||
"Failed to load resource: the server responded with a status of 404 ()",
|
||||
"https://felhom.enkisfelhom.hu/static/assets/adventurelog-logo.svg"
|
||||
]
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
@@ -0,0 +1,29 @@
|
||||
# R-1096 — Redis persistence in the catalog (research, 2026-10-16 night; catalog HEAD af75dc0; nothing changed)
|
||||
|
||||
Read-only research (catalog compose files + upstream docs/source). No valkey image in the catalog. No `.felhom.yml`
|
||||
classifies a Redis volume; every named volume (Redis included) rides the nightly volume dump, taken with the stack
|
||||
stopped, so Redis saves cleanly first.
|
||||
|
||||
Facts that hold for all: `redis:7-alpine` / `7.4-alpine` without a config saves RDB snapshots to `/data` (3600/1,
|
||||
300/100, 60/10000). An RDB file is written to a temp file and renamed only when complete — a full disk leaves the old
|
||||
file intact (and `stop-writes-on-bgsave-error` refuses writes until a save succeeds, then recovers by itself). An
|
||||
APPEND-ONLY file damaged in the middle (2026-09-24: zero bytes near the end, „Expected \r\n, got: 0000") makes Redis
|
||||
abort until `redis-check-aof --fix`; `aof-load-truncated yes` only covers a cut-off tail.
|
||||
|
||||
| app | service | persistence today | volume | what the app keeps in Redis | verdict | recommendation | source |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| romm 5.3.1 | romm-redis (redis:7-alpine) | AOF + RDB | romm_redis_data | sessions; RQ job queues; caches reloaded at start; Switch TitleDB / LaunchBox stores (refilled by the next metadata task) | sessions + queue | AOF → RDB (`--appendonly no`) | docs.romm.app/4.9.2/install/redis-or-valkey/ ; github.com/rommapp/romm 5.3.1 backend/handler/redis_handler.py, backend/startup.py |
|
||||
| docmost 0.96.0 | docmost-redis | AOF + RDB | docmost_redis_data | BullMQ queues (email, notifications, page history, search index, import/export) | queue | AOF → RDB | github.com/docmost/docmost docker-compose.yml, queue.constants.ts |
|
||||
| paperless-ngx 2.20.15 | paperless-redis | AOF + RDB | paperless_redis_data | Celery queue (consumption, mail fetch, classifier) | queue | AOF → RDB (upstream's own broker uses the default RDB) | paperless-ngx docs/configuration.md, docker-compose.postgres.yml |
|
||||
| immich v3.2.4 | immich-redis | AOF + RDB | immich_redis_data | BullMQ job queues + websocket pub/sub; every job can be re-queued from Administration → Jobs | throwaway queue | OFF (`--save "" --appendonly no`, tmpfs /data) — upstream runs it with no volume | immich docker/docker-compose.yml |
|
||||
| nextcloud 34.0.4 | nextcloud-redis | AOF + RDB | nextcloud_redis_data | file-locking cache, shared cache, PHP sessions | cache + sessions | OFF (same shape) — upstream examples have no volume | nextcloud/docker README (REDIS_HOST), .examples |
|
||||
| outline 1.10.1 | outline-redis | RDB (image default) | outline_redis_data | Bull queues, pub/sub, collaboration | queue | keep (RDB is full-disk-safe) | outline server/queues/index.ts, server/storage/redis.ts |
|
||||
| dawarich 1.15.3 | dawarich-redis (7.4) | RDB only (`--save 900 1 --save 300 10 --appendonly no`) | dawarich_redis | Sidekiq queue + Rails cache | queue | keep (= upstream) | Freika/dawarich docker/docker-compose.yml |
|
||||
|
||||
Open before any template edit (why it was NOT edited tonight): the same Redis lines sit in ladder step files
|
||||
(romm 2, docmost 1, nextcloud 2, immich 2) and the step rule for a compose-only change was not checked; removing a
|
||||
volume from compose leaves the old volume on installed boxes (orphan — nightly dump and old-backup restore behaviour
|
||||
unchecked); the AOF → RDB switch keeping existing data is likely (Redis 7 writes `dump.rdb` at a clean shutdown) but
|
||||
unproven. Also: R-1096's own history is wrong — `audits/r672-2026-09-24/B7-redis-aof-fix.txt` shows RomM's AOF WAS
|
||||
repaired on 2026-09-24 (cut by 6 631 B, fix_rc=0, romm-redis then running); the 2026-10-16 crash loop has no proven
|
||||
cause (its Redis log was never read).
|
||||
@@ -0,0 +1,15 @@
|
||||
=== demo-hp
|
||||
containers: 28 not healthy/running: none
|
||||
restic 0.19.1 compiled with go1.26.4 on linux/amd64
|
||||
2026/10/16 21:51:51 updater.go:855: [INFO] [selfupdate] Post-update startup: update successful (0.324.0-rc.1 → 0.324.0)
|
||||
=== felhom-pve
|
||||
containers: 9 not healthy/running: none
|
||||
restic 0.19.1 compiled with go1.26.4 on linux/amd64
|
||||
2026/10/16 21:51:43 [INFO] [selfupdate] Post-update startup: update successful (0.323.0 → 0.324.0)
|
||||
=== root@192.168.0.154
|
||||
containers: 17 not healthy/running: none
|
||||
restic 0.19.1 compiled with go1.26.4 on linux/amd64
|
||||
2026/10/16 21:51:54 [INFO] [selfupdate] Post-update startup: update successful (0.323.0 → 0.324.0)
|
||||
felhom.enkisfelhom.hu /login: 200
|
||||
felhom.demo-felhom.eu /login: 200
|
||||
felhom.enkicsifelhom.hu /login: 200
|
||||
@@ -0,0 +1,42 @@
|
||||
control NEGATIVE (a stub answering 200 over plain http): convicted, as it must (200 -)
|
||||
== tester-1 (enkicsifelhom.hu): 13 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://media.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://media.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://plex.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://plex.enkicsifelhom.hu/r1033-check?q=1
|
||||
OK http://prowlarr.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://prowlarr.enkicsifelhom.hu/r1033-check?q=1
|
||||
OK http://radarr.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://radarr.enkicsifelhom.hu/r1033-check?q=1
|
||||
OK http://sonarr.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://sonarr.enkicsifelhom.hu/r1033-check?q=1
|
||||
OK http://torrent.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://torrent.enkicsifelhom.hu/r1033-check?q=1
|
||||
OK http://transmission.enkicsifelhom.hu/r1033-check?q=1 -> 301 https://transmission.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): 16 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://grimmory-r1106.enkisfelhom.hu/r1033-check?q=1 -> 301 https://grimmory-r1106.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://rallly-r1106.enkisfelhom.hu/r1033-check?q=1 -> 301 https://rallly-r1106.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,121 @@
|
||||
#!/usr/bin/env python3
|
||||
"""v0.324.0 night (R-983, R-976): the household's normal flow in headless Chrome through the PUBLIC addresses — sign in, sign out (now a POST form),
|
||||
sign in again, a family-gated app (Grimmory), a setup-gated app (Rallly). Minimal CDP client: log in to the controller through its PUBLIC address in headless Chrome, open each
|
||||
app-page tab, assert computed styles, collect console errors, save screenshots. The password is read
|
||||
from a 0600 file and only ever sent inside a CDP message; it is never printed."""
|
||||
import base64, json, os, socket, struct, subprocess, sys, time, urllib.request
|
||||
|
||||
CHROME = os.path.expanduser('~/.cache/ms-playwright/chromium_headless_shell-1243/chrome-headless-shell-linux64/chrome-headless-shell')
|
||||
BASE = sys.argv[1] # https://felhom.enkisfelhom.hu
|
||||
PWFILE = sys.argv[2] # the controller password (0600 file)
|
||||
APPS = sys.argv[3].split(',') # family-gated,setup-gated app hostnames
|
||||
OUT = sys.argv[4]
|
||||
PORT = 9333
|
||||
os.makedirs(OUT, exist_ok=True)
|
||||
prof = os.path.join(OUT, '.profile')
|
||||
proc = subprocess.Popen([CHROME, f'--remote-debugging-port={PORT}', '--no-sandbox', f'--user-data-dir={prof}',
|
||||
'--window-size=1280,900', 'about:blank'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||
try:
|
||||
for _ in range(50):
|
||||
try:
|
||||
tabs = json.load(urllib.request.urlopen(f'http://127.0.0.1:{PORT}/json'))
|
||||
break
|
||||
except Exception:
|
||||
time.sleep(0.2)
|
||||
ws_url = [t for t in tabs if t['type'] == 'page'][0]['webSocketDebuggerUrl']
|
||||
host, path = ws_url[len('ws://'):].split('/', 1)
|
||||
h, p = host.split(':')
|
||||
sock = socket.create_connection((h, int(p)))
|
||||
key = base64.b64encode(os.urandom(16)).decode()
|
||||
sock.send(f'GET /{path} HTTP/1.1\r\nHost: {host}\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: {key}\r\nSec-WebSocket-Version: 13\r\n\r\n'.encode())
|
||||
buf = b''
|
||||
while b'\r\n\r\n' not in buf:
|
||||
buf += sock.recv(4096)
|
||||
st = {'pending': buf.split(b'\r\n\r\n', 1)[1]}
|
||||
|
||||
def send(obj):
|
||||
data = json.dumps(obj).encode()
|
||||
hdr = bytearray([0x81])
|
||||
n = len(data)
|
||||
if n < 126: hdr.append(0x80 | n)
|
||||
elif n < 65536: hdr.append(0x80 | 126); hdr += struct.pack('>H', n)
|
||||
else: hdr.append(0x80 | 127); hdr += struct.pack('>Q', n)
|
||||
mask = os.urandom(4); hdr += mask
|
||||
sock.sendall(bytes(hdr) + bytes(b ^ mask[i % 4] for i, b in enumerate(data)))
|
||||
|
||||
def recv_exact(n):
|
||||
while len(st['pending']) < n:
|
||||
st['pending'] += sock.recv(1 << 20)
|
||||
out, st['pending'] = st['pending'][:n], st['pending'][n:]
|
||||
return out
|
||||
|
||||
def recv():
|
||||
msg = b''
|
||||
while True:
|
||||
b0, b1 = recv_exact(2)
|
||||
n = b1 & 0x7f
|
||||
if n == 126: n = struct.unpack('>H', recv_exact(2))[0]
|
||||
elif n == 127: n = struct.unpack('>Q', recv_exact(8))[0]
|
||||
msg += recv_exact(n)
|
||||
if b0 & 0x80: return json.loads(msg)
|
||||
|
||||
console = []
|
||||
mid = [0]
|
||||
def call(method, **params):
|
||||
mid[0] += 1; i = mid[0]
|
||||
send({'id': i, 'method': method, 'params': params})
|
||||
while True:
|
||||
m = recv()
|
||||
if m.get('method') == 'Runtime.exceptionThrown':
|
||||
console.append(('exception', m['params']['exceptionDetails'].get('text', ''), m['params']['exceptionDetails'].get('exception', {}).get('description', '')[:200]))
|
||||
elif m.get('method') == 'Runtime.consoleAPICalled' and m['params']['type'] in ('error', 'warning'):
|
||||
console.append((m['params']['type'], ' '.join(str(a.get('value', a.get('description', ''))) for a in m['params']['args'])[:200]))
|
||||
elif m.get('method') == 'Log.entryAdded' and m['params']['entry']['level'] in ('error', 'warning'):
|
||||
e = m['params']['entry']; console.append(('log-' + e['level'], e.get('text', '')[:200], e.get('url', '')))
|
||||
if m.get('id') == i:
|
||||
if 'error' in m: raise RuntimeError(f'{method}: {m["error"]}')
|
||||
return m.get('result', {})
|
||||
|
||||
def ev(expr):
|
||||
r = call('Runtime.evaluate', expression=expr, returnByValue=True, awaitPromise=True)
|
||||
return r.get('result', {}).get('value')
|
||||
|
||||
def goto(url):
|
||||
call('Page.navigate', url=url)
|
||||
for _ in range(100):
|
||||
time.sleep(0.2)
|
||||
if ev('document.readyState') == 'complete':
|
||||
break
|
||||
time.sleep(1.5) # images' onerror, layout
|
||||
|
||||
for d in ('Page', 'Runtime', 'Log', 'Network'):
|
||||
call(d + '.enable')
|
||||
res = {}
|
||||
def login():
|
||||
pw = open(PWFILE).read().strip()
|
||||
goto(BASE + '/login')
|
||||
ev("(function(){var f=document.querySelector('input[type=password]'); f.value=%s; f.form.submit(); return 1})()" % json.dumps(pw))
|
||||
time.sleep(3)
|
||||
return ev('location.pathname')
|
||||
res['1_sign_in_lands_on'] = login()
|
||||
res['2_headers'] = ev("fetch('/launcher',{credentials:'include'}).then(r=>({status:r.status, xfo:r.headers.get('x-frame-options'), csp:r.headers.get('content-security-policy')}))")
|
||||
res['3_signout_control'] = ev("(function(){var f=[...document.querySelectorAll('form')].find(f=>/logout/.test(f.action)); return f?{method:f.method, hasCsrf:!!f.querySelector('input[name=_csrf]')}:null})()")
|
||||
ev("(function(){var f=[...document.querySelectorAll('form')].find(f=>/logout/.test(f.action)); if(f){f.submit()} return !!f})()")
|
||||
time.sleep(3)
|
||||
res['4_after_signout'] = ev('location.pathname')
|
||||
goto(BASE + '/launcher')
|
||||
res['5_launcher_after_signout'] = ev('location.pathname')
|
||||
res['6_sign_in_again'] = login()
|
||||
for host in APPS:
|
||||
goto('https://' + host + '/')
|
||||
time.sleep(4)
|
||||
res['7_app ' + host] = ev("({host: location.host, path: location.pathname, title: document.title, gatePage: !!document.querySelector('form[action*=\"__family\"],form[action*=\"__felhom_gate\"],[data-gate]') })")
|
||||
def shot(name):
|
||||
s = call('Page.captureScreenshot', format='png')
|
||||
open(os.path.join(OUT, name + '.png'), 'wb').write(base64.b64decode(s['data']))
|
||||
shot('last-app')
|
||||
res['console'] = console[:20]
|
||||
print(json.dumps(res, indent=1, ensure_ascii=False))
|
||||
finally:
|
||||
proc.terminate()
|
||||
subprocess.run(['rm', '-rf', prof])
|
||||
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python3
|
||||
"""drill.py — R-1105 Part 2 on demo-hp guest 9201, THROUGH THE PRODUCT (the endpoints the dashboard's buttons post).
|
||||
|
||||
Runs on DooPlex. Env: SC (0600 dir with .ctlpw), EV (evidence dir), TARGET=9201. Steps (one per invocation):
|
||||
restore-old the product's off-site restore („Visszaállítás a távoli tárolóból", unit only) BEFORE any 0.18 backup:
|
||||
restic 0.18.1 restores the newest snapshot, which restic 0.14.0 made
|
||||
offsite-run „Távoli mentés most" (POST /backup/offbox/run: dumps + units + push), polled to its end
|
||||
restore APP the household's full off-site restore: prepare (size), confirm → download, then „Teljes
|
||||
visszaállítás" (POST /backup/offbox/reconstitute), each polled to its end
|
||||
delcopy APP remove the verification copy (POST /backup/offbox/verify-copy/delete)
|
||||
Nothing here writes to an app's data except what those buttons write.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import 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, "drill-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
|
||||
|
||||
|
||||
def form(path, fields):
|
||||
"""A dashboard FORM post with the session's CSRF — exactly what the button sends."""
|
||||
sess = open(f"{w.SC}/sess{os.getpid()}.txt").read().strip()
|
||||
csrf = open(f"{w.SC}/csrf{os.getpid()}.txt").read().strip()
|
||||
args = ["curl", "-sk", "-D", "-", "-o", "/dev/null", "-H", w.HOSTHDR, "-H", f"Cookie: {sess}", "-X", "POST",
|
||||
"--data-urlencode", f"_csrf={csrf}"]
|
||||
for k, v in fields.items():
|
||||
args += ["--data-urlencode", f"{k}={v}"]
|
||||
r = w.sh(args + [f"{w.BASE}{path}"], timeout=180)
|
||||
head = (r.stdout or "").split("\n")[0].strip()
|
||||
loc = next((l.split(":", 1)[1].strip() for l in (r.stdout or "").split("\n") if l.lower().startswith("location:")), "")
|
||||
say(f"POST {path} {fields} -> {head} {loc}")
|
||||
return head, loc
|
||||
|
||||
|
||||
def wait_restore(cap=3600):
|
||||
t0, last = time.time(), None
|
||||
while time.time() - t0 < cap:
|
||||
code, d = w.ctl("GET", "/api/backup/restore-status")
|
||||
dd = (d or {}).get("data") or d or {}
|
||||
cur = (dd.get("running"), dd.get("op"), dd.get("ok"), (dd.get("message") or "")[:300])
|
||||
if cur != last:
|
||||
say(f" +{time.time()-t0:7.1f}s restore-status {cur}")
|
||||
last = cur
|
||||
if not dd.get("running") and time.time() - t0 > 4:
|
||||
return dd
|
||||
time.sleep(3)
|
||||
say(" restore did not end within the cap")
|
||||
return {}
|
||||
|
||||
|
||||
def offsite_status():
|
||||
return w.ctl("GET", "/backup/offbox/status")[1]
|
||||
|
||||
|
||||
def offsite_run(cap=3600):
|
||||
before = offsite_status()
|
||||
say(f"off-site before: status={before.get('status')} last_run={before.get('last_run')} snapshots={before.get('snapshots')}")
|
||||
form("/backup/offbox/run", {})
|
||||
t0, last = time.time(), None
|
||||
while time.time() - t0 < cap:
|
||||
s = offsite_status()
|
||||
p = s.get("progress") or {}
|
||||
cur = (s.get("status"), p.get("phase"), p.get("current_app"), round(p.get("percent") or 0))
|
||||
if cur != last:
|
||||
say(f" +{time.time()-t0:7.1f}s {cur} files {p.get('files_done')}/{p.get('total_files')} bytes {p.get('done_human')}/{p.get('total_human')}")
|
||||
last = cur
|
||||
if s.get("last_run") != before.get("last_run") and not p.get("active") and s.get("status") != "running":
|
||||
say(f"off-site after: status={s.get('status')} last_run={s.get('last_run')} duration={s.get('last_duration')} "
|
||||
f"snapshots={s.get('snapshots')} size={s.get('repo_size_human')} error={s.get('last_error')!r}")
|
||||
return s
|
||||
time.sleep(3)
|
||||
say("off-site run did not end within the cap")
|
||||
return {}
|
||||
|
||||
|
||||
def main():
|
||||
step = sys.argv[1]
|
||||
w.login()
|
||||
if step == "restore-old":
|
||||
app = sys.argv[2]
|
||||
form("/backup/offbox/restore", {"app": app})
|
||||
say(json.dumps(wait_restore()))
|
||||
elif step == "offsite-run":
|
||||
offsite_run()
|
||||
elif step == "restore":
|
||||
app = sys.argv[2]
|
||||
head, loc = form("/backup/offbox/restore", {"app": app, "mode": "full"})
|
||||
m = re.search(r"full_size=([^&]+)", loc)
|
||||
say(f" prepared: size {m.group(1) if m else '?'}")
|
||||
form("/backup/offbox/restore", {"app": app, "mode": "full", "confirm": "1"})
|
||||
say(json.dumps(wait_restore()))
|
||||
form("/backup/offbox/reconstitute", {"app": app, "confirm": "1"})
|
||||
say(json.dumps(wait_restore()))
|
||||
elif step == "delcopy":
|
||||
form("/backup/offbox/verify-copy/delete", {"stack": sys.argv[2], "confirm": "1"})
|
||||
else:
|
||||
sys.exit(f"unknown step {step}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python3
|
||||
"""drill2.py — R-1106 proof on demo-hp 9201 (controller 0.324.0-rc.N), THROUGH THE PRODUCT.
|
||||
|
||||
Runs on DooPlex. Env: SC (0600 dir with .ctlpw), EV (evidence dir), TARGET=9201. One step per call:
|
||||
install APP deploy fresh (new generated passwords)
|
||||
seed APP TAG a marker row in the app's database (+ a file in Grimmory's books folder); TAG names it
|
||||
check APP TAG the app's state, the marker, auth errors in the app log, the DB logins with the app's env
|
||||
offsite-run „Távoli mentés most" (dumps + units + push)
|
||||
remove APP MODE MODE all = drive data + backups; keepbackups = drive data gone, backups kept;
|
||||
keepdata = drive data kept, backups kept
|
||||
restore-offsite APP full off-site restore (prepare, confirm, „Teljes visszaállítás")
|
||||
restore-onbox APP the backups page's „Visszaállítás" from the app's own unit (POST /backup/restore)
|
||||
install-kept APP install choosing „A megőrzött adataimat használom" (kept_data=use)
|
||||
Database probes run INSIDE the app's own containers with the container's own env (`docker exec … sh -c '…$VAR…'`):
|
||||
no password leaves the box or reaches this log.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import drill # noqa: E402
|
||||
|
||||
w = drill.w
|
||||
say = drill.say
|
||||
SUB = {"rallly": "rallly-r1106", "grimmory": "grimmory-r1106"}
|
||||
VALUES = {"grimmory": {"HDD_PATH": "/mnt/felhom-drives/hdd_1"}}
|
||||
BOOKS = "/mnt/felhom-drives/hdd_1/userdata/media/grimmory"
|
||||
|
||||
SQL = {
|
||||
"rallly": ("rallly-postgres", "psql -U rallly -d rallly -v ON_ERROR_STOP=1 -Atc"),
|
||||
"grimmory": ("grimmory-db", 'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" grimmory -N -e'),
|
||||
}
|
||||
|
||||
|
||||
def sql(app, q):
|
||||
"""The SQL goes in on STDIN (a heredoc), so no quote inside it can break the shell around it. (The first version
|
||||
passed it with `-c "…"` inside `sh -c '…'`, and the marker's own single quotes broke it — run A1, recorded.)"""
|
||||
c, cmd = SQL[app]
|
||||
cmd = cmd.replace(" -Atc", " -At").replace(" -N -e", " -N")
|
||||
return w.guest(f"docker exec -i {c} sh -c '{cmd}' 2>&1 <<'R1106SQL' | tail -3\n{q};\nR1106SQL\n").strip()
|
||||
|
||||
|
||||
def seed(app, tag):
|
||||
say(f"seed {app} {tag}: " + sql(app, f"create table if not exists r1106_marker(note varchar(80)); insert into r1106_marker values ('{tag}'); select note from r1106_marker"))
|
||||
if app == "grimmory":
|
||||
say(" file: " + w.guest(f"printf '%s\\n' '{tag}' > {BOOKS}/{tag}.txt && chown 1000:1000 {BOOKS}/{tag}.txt && sha256sum {BOOKS}/{tag}.txt").strip())
|
||||
|
||||
|
||||
def check(app, tag):
|
||||
st = w.stack(app)
|
||||
say(f"check {app}: deployed={st.get('deployed')} state={st.get('state')} hold={st.get('hold_reason')!r}")
|
||||
say(f" marker row: {sql(app, 'select note from r1106_marker')!r} (want {tag!r} present)")
|
||||
if app == "rallly":
|
||||
logs = w.guest("docker logs --since 10m rallly 2>&1 | grep -c -E 'P1000|Authentication failed' ; docker ps --filter name=^rallly$ --format '{{.Status}}'")
|
||||
say(f" rallly log auth errors (10 min) / status: {' | '.join(logs.split())}")
|
||||
say(" app login to its DB (the app's own DATABASE_URL user): " + w.guest(
|
||||
"docker exec rallly-postgres sh -c 'PGPASSWORD=\"$POSTGRES_PASSWORD\" psql -h 127.0.0.1 -U rallly -d rallly -Atc \"select 1\"' 2>&1 | tail -1").strip())
|
||||
say(" front door: " + w.guest("curl -s -o /dev/null -w '%{http_code}' --max-time 15 -H 'Host: rallly-r1106.enkisfelhom.hu' http://127.0.0.1/ 2>/dev/null; echo"))
|
||||
else:
|
||||
say(" root login (the product's dump user): " + w.guest(
|
||||
"docker exec grimmory-db sh -c 'mariadb -uroot -p\"$MARIADB_ROOT_PASSWORD\" -N -e \"select 1\"' 2>&1 | tail -1").strip())
|
||||
say(" app user login (the app's own DB user): " + w.guest(
|
||||
"docker exec grimmory-db sh -c 'mariadb -ugrimmory -p\"$MARIADB_PASSWORD\" grimmory -N -e \"select 1\"' 2>&1 | tail -1").strip())
|
||||
say(" app health: " + w.guest("docker ps --filter name=^grimmory$ --format '{{.Status}}'; docker exec grimmory wget -q -O- http://127.0.0.1:6060/api/v1/healthcheck 2>&1 | head -c 200; echo").strip())
|
||||
say(" file: " + w.guest(f"sha256sum {BOOKS}/{tag}.txt 2>&1").strip())
|
||||
|
||||
|
||||
def remove(app, mode):
|
||||
hdd = mode == "all" or mode == "keepbackups"
|
||||
bk = mode == "all"
|
||||
c1, _ = w.ctl("POST", f"/api/stacks/{app}/stop")
|
||||
for _ in range(24):
|
||||
time.sleep(5)
|
||||
if w.stack(app).get("state") != "running":
|
||||
break
|
||||
code, d = w.ctl("POST", f"/api/stacks/{app}/remove", {"remove_hdd_data": hdd, "remove_backups": bk})
|
||||
say(f"remove {app} ({mode}: remove_hdd_data={hdd}, remove_backups={bk}) -> {code} {str(d)[:200]}")
|
||||
if app == "grimmory" and hdd:
|
||||
# the household's books folder is never removed by the product (decision 67); the household deletes its file
|
||||
say(" household deletes the books-folder files: " + w.guest(f"rm -fv {BOOKS}/r1106-*.txt | wc -l").strip())
|
||||
|
||||
|
||||
def main():
|
||||
step, args = sys.argv[1], sys.argv[2:]
|
||||
w.login()
|
||||
if step == "install":
|
||||
say(f"install {args[0]}: {w.deploy(args[0], SUB[args[0]], VALUES.get(args[0]))}")
|
||||
elif step == "install-kept":
|
||||
os.environ["KEPT"] = "use"
|
||||
say(f"install {args[0]} with kept_data=use: {w.deploy(args[0], SUB[args[0]], VALUES.get(args[0]))}")
|
||||
elif step == "seed":
|
||||
seed(args[0], args[1])
|
||||
elif step == "check":
|
||||
check(args[0], args[1])
|
||||
elif step == "offsite-run":
|
||||
drill.offsite_run()
|
||||
elif step == "remove":
|
||||
remove(args[0], args[1])
|
||||
elif step == "restore-offsite":
|
||||
app = args[0]
|
||||
head, loc = drill.form("/backup/offbox/restore", {"app": app, "mode": "full"})
|
||||
drill.form("/backup/offbox/restore", {"app": app, "mode": "full", "confirm": "1"})
|
||||
say(json.dumps(drill.wait_restore(), ensure_ascii=False)[:700])
|
||||
drill.form("/backup/offbox/reconstitute", {"app": app, "confirm": "1"})
|
||||
say(json.dumps(drill.wait_restore(), ensure_ascii=False)[:900])
|
||||
elif step == "restore-onbox":
|
||||
r = w.restore(args[0])
|
||||
say("onbox restore: " + json.dumps({k: r.get(k) for k in ("ok", "snapshot_id", "http", "location", "seconds")}, ensure_ascii=False))
|
||||
c, d = w.ctl("GET", "/api/backup/restore-status")
|
||||
say(" restore-status: " + json.dumps((d or {}).get("data"), ensure_ascii=False)[:900])
|
||||
else:
|
||||
sys.exit("unknown step " + step)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
# R-1106 drill, paths A (rerun with the fixed seed) and B, on demo-hp 9201. Env SC, EV, TARGET from the caller.
|
||||
E=$(cd "$(dirname "$0")/.." && pwd); D="python3 $E/tools/drill2.py"
|
||||
echo "##### PATH A2 — off-site full restore after a reinstall (seed fixed)"
|
||||
for a in rallly grimmory; do $D seed $a r1106-A2; $D check $a r1106-A2; done
|
||||
$D offsite-run
|
||||
for a in rallly grimmory; do $D remove $a all; done
|
||||
for a in rallly grimmory; do $D install $a; done
|
||||
echo "## A2 negative control after the reinstall"; for a in rallly grimmory; do $D check $a r1106-A2; done
|
||||
for a in rallly grimmory; do $D restore-offsite $a; done
|
||||
sleep 45; echo "## A2 after the off-site restore"; for a in rallly grimmory; do $D check $a r1106-A2; done
|
||||
echo "##### PATH B — on-box restore (Visszaallitas) after a reinstall"
|
||||
for a in rallly grimmory; do $D seed $a r1106-B; done
|
||||
$D offsite-run
|
||||
for a in rallly grimmory; do $D remove $a keepbackups; done
|
||||
for a in rallly grimmory; do $D install $a; done
|
||||
echo "## B negative control after the reinstall"; for a in rallly grimmory; do $D check $a r1106-B; done
|
||||
for a in rallly grimmory; do $D restore-onbox $a; done
|
||||
sleep 45; echo "## B after the on-box restore"; for a in rallly grimmory; do $D check $a r1106-B; done
|
||||
echo "##### DONE"
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
E=$(cd "$(dirname "$0")/.." && pwd); D="python3 $E/tools/drill2.py"
|
||||
echo "##### PATH B — on-box restore (Visszaallitas) after a reinstall"
|
||||
for a in rallly grimmory; do $D seed $a r1106-B; done
|
||||
$D offsite-run
|
||||
for a in rallly grimmory; do $D remove $a keepbackups; done
|
||||
for a in rallly grimmory; do $D install $a; done
|
||||
echo "## B negative control after the reinstall"; for a in rallly grimmory; do $D check $a r1106-B; done
|
||||
for a in rallly grimmory; do $D restore-onbox $a; done
|
||||
sleep 45; echo "## B after the on-box restore"; for a in rallly grimmory; do $D check $a r1106-B; done
|
||||
echo "##### DONE"
|
||||
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
# R-1105 — run ONE read-only restic command against THIS box's off-site store, with the restic of a chosen controller
|
||||
# image (0.322.0 = restic 0.14.0, 0.323.0-rc.N = 0.18.1). Runs INSIDE the guest (pushed by pct). It builds the same
|
||||
# `rclone:` repo + `rclone.program` the controller builds (offboxBaseArgs, pinned transport) from settings.json, mounts
|
||||
# the controller's own volumes READ-ONLY (--volumes-from …:ro) and shares its network. It prints no host, user, path,
|
||||
# key or password. ALLOWED verbs: snapshots, restore, ls, cat config — each with --no-lock, so nothing is written to the
|
||||
# store. Usage: rx.sh <image> <restic args…>
|
||||
set -euo pipefail
|
||||
IMG="$1"; shift
|
||||
case "$1" in snapshots|restore|ls|cat) ;; *) echo "rx.sh: refusing verb '$1' (read-only verbs only)" >&2; exit 2 ;; esac
|
||||
S=/var/lib/docker/volumes/felhom-controller-data/_data/data/settings.json
|
||||
eval "$(python3 - "$S" <<'EOF'
|
||||
import json, shlex, sys
|
||||
o = json.load(open(sys.argv[1]))["offbox"]
|
||||
assert o.get("transport") == "rclone-pinned", "rx.sh handles the pinned transport only"
|
||||
d = "/opt/docker/felhom-controller/data/offbox"
|
||||
prog = (f"ssh -p {o.get('port') or 23} -oBatchMode=yes -oConnectTimeout=10 -oStrictHostKeyChecking=yes "
|
||||
f"-oUserKnownHostsFile={d}/known_hosts -oIdentitiesOnly=yes -i {d}/ssh_key {o['user']}@{o['host']} rclone")
|
||||
print("REPO=" + shlex.quote("rclone:" + o["repo_path"]))
|
||||
print("PROG=" + shlex.quote("rclone.program=" + prog))
|
||||
EOF
|
||||
)"
|
||||
mkdir -p /tmp/r1105
|
||||
exec docker run --rm --network container:felhom-controller --volumes-from felhom-controller:ro \
|
||||
-v /tmp/r1105:/tmp/r1105 -e RESTIC_PASSWORD_FILE=/opt/docker/felhom-controller/data/offbox/repo_password \
|
||||
-e RESTIC_CACHE_DIR=/tmp/r1105/cache-$(echo "$IMG" | tr -c 'a-z0-9.\n' '_') \
|
||||
--entrypoint restic "$IMG" -r "$REPO" -o "$PROG" --no-lock "$@"
|
||||
@@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
# R-972 Part 4 — the LAN sharing checks, run ON DOOPLEX against demo-hp 9201's felhom-samba. Usage: sambacheck.sh <label>
|
||||
# The household SMB password is read from $SC/.smbpw (0600) into a 0600 smbclient auth file; it is never printed.
|
||||
# smbclient runs from our own felhom-samba image as a throwaway client container (--rm, host network, nothing
|
||||
# installed on DooPlex); nmblookup is DooPlex's own; the mDNS and WS-Discovery probes are plain python sockets.
|
||||
set -u
|
||||
LABEL=${1:?label}; IP=192.168.0.155; NAME=FELHOMHP; SHARE=r1105; USERNAME=felhom
|
||||
IMG=gitea.dooplex.hu/admin/felhom-samba:1.2.0
|
||||
A=$(mktemp -p "$SC"); chmod 600 "$A"; printf 'username=%s\npassword=%s\n' "$USERNAME" "$(cat "$SC/.smbpw")" > "$A"
|
||||
B=$(mktemp -p "$SC"); chmod 600 "$B"; printf 'username=%s\npassword=%s\n' "$USERNAME" "not-the-password" > "$B"
|
||||
echo "== $LABEL — $(date -u +%FT%TZ)"
|
||||
echo "-- 1. smbclient with the household password: write, list, read back, delete"
|
||||
docker run --rm --network host -v "$A":/auth:ro --entrypoint sh "$IMG" -c \
|
||||
"echo r1105-$LABEL > /tmp/probe.txt && smbclient //$IP/$SHARE -A /auth -m SMB3 -c 'put /tmp/probe.txt probe-$LABEL.txt; ls probe-*; get probe-$LABEL.txt /tmp/back.txt; rm probe-$LABEL.txt' 2>&1 | grep -vE '^\s*$|blocks of size'; echo \"read back: \$(cat /tmp/back.txt 2>/dev/null || echo NOTHING)\""
|
||||
echo "-- 2. negative control: a wrong password"
|
||||
docker run --rm --network host -v "$B":/auth:ro --entrypoint smbclient "$IMG" //$IP/$SHARE -A /auth -m SMB3 -c 'ls' 2>&1 | tail -1
|
||||
rm -f "$A" "$B"
|
||||
echo "-- 3. nmbd: NetBIOS name query from DooPlex"
|
||||
nmblookup -U $IP "$NAME" 2>&1 | tail -1
|
||||
echo "-- 4. avahi: mDNS A query for $NAME.local"
|
||||
python3 - "$NAME" <<'EOF'
|
||||
import socket, struct, sys, time
|
||||
name = sys.argv[1].lower() + ".local"
|
||||
q = struct.pack(">HHHHHH", 0, 0, 1, 0, 0, 0) + b"".join(bytes([len(p)]) + p.encode() for p in name.split(".")) + b"\0" + struct.pack(">HH", 1, 0x8001)
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(3)
|
||||
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
|
||||
s.sendto(q, ("224.0.0.251", 5353))
|
||||
try:
|
||||
while True:
|
||||
d, a = s.recvfrom(4096)
|
||||
if d[-4:] and len(d) > 12 and struct.unpack(">H", d[6:8])[0] > 0:
|
||||
print(f"answer from {a[0]}: {socket.inet_ntoa(d[-4:])} for {name}"); break
|
||||
except socket.timeout:
|
||||
print(f"NO mDNS answer for {name}")
|
||||
EOF
|
||||
echo "-- 5. wsdd: WS-Discovery Probe"
|
||||
python3 - <<'EOF'
|
||||
import socket, uuid
|
||||
probe = f'''<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:wsdp="http://schemas.xmlsoap.org/ws/2006/02/devprof"><soap:Header><wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To><wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action><wsa:MessageID>urn:uuid:{uuid.uuid4()}</wsa:MessageID></soap:Header><soap:Body><wsd:Probe><wsd:Types>wsdp:Device</wsd:Types></wsd:Probe></soap:Body></soap:Envelope>'''
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(3)
|
||||
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
|
||||
s.sendto(probe.encode(), ("239.255.255.250", 3702))
|
||||
seen = []
|
||||
try:
|
||||
while True:
|
||||
d, a = s.recvfrom(65535)
|
||||
if b"ProbeMatches" in d:
|
||||
seen.append(a[0])
|
||||
except socket.timeout:
|
||||
pass
|
||||
print("ProbeMatches from:", sorted(set(seen)) or "NOBODY", "— the box (192.168.0.155) answered" if "192.168.0.155" in seen else "— the box did NOT answer")
|
||||
EOF
|
||||
echo "-- 6. processes in the samba container, and its image"
|
||||
ssh -o BatchMode=yes demo-hp "LC_ALL=C pct exec 9201 -- sh -c 'docker inspect felhom-samba --format \"{{.Config.Image}} created {{.Created}}\"; docker exec felhom-samba ps -o pid,comm,args | grep -E \"smbd|nmbd|wsdd|avahi|dbus|tini\" | grep -v grep | cut -c1-90; docker volume ls -q | grep -i samba'" 2>/dev/null
|
||||
@@ -0,0 +1,54 @@
|
||||
#!/bin/bash
|
||||
# R-972 Part 4 — the LAN sharing checks, run ON DOOPLEX against demo-hp 9201's felhom-samba. Usage: sambacheck.sh <label>
|
||||
# The household SMB password is read from $SC/.smbpw (0600) into a 0600 smbclient auth file; it is never printed.
|
||||
# smbclient runs from our own felhom-samba image as a throwaway client container (--rm, host network, nothing
|
||||
# installed on DooPlex); nmblookup is DooPlex's own; the mDNS and WS-Discovery probes are plain python sockets.
|
||||
set -u
|
||||
LABEL=${1:?label}; IP=192.168.0.155; NAME=FELHOMHP; SHARE=r1108; USERNAME=felhom
|
||||
IMG=gitea.dooplex.hu/admin/felhom-samba:1.2.0
|
||||
A=$(mktemp -p "$SC"); chmod 600 "$A"; printf 'username=%s\npassword=%s\n' "$USERNAME" "$(cat "$SC/.smbpw")" > "$A"
|
||||
B=$(mktemp -p "$SC"); chmod 600 "$B"; printf 'username=%s\npassword=%s\n' "$USERNAME" "not-the-password" > "$B"
|
||||
echo "== $LABEL — $(date -u +%FT%TZ)"
|
||||
echo "-- 1. smbclient with the household password: write, list, read back, delete"
|
||||
docker run --rm --network host -v "$A":/auth:ro --entrypoint sh "$IMG" -c \
|
||||
"echo r1105-$LABEL > /tmp/probe.txt && smbclient //$IP/$SHARE -A /auth -m SMB3 -c 'put /tmp/probe.txt probe-$LABEL.txt; ls probe-*; get probe-$LABEL.txt /tmp/back.txt; rm probe-$LABEL.txt' 2>&1 | grep -vE '^\s*$|blocks of size'; echo \"read back: \$(cat /tmp/back.txt 2>/dev/null || echo NOTHING)\""
|
||||
echo "-- 2. negative control: a wrong password"
|
||||
docker run --rm --network host -v "$B":/auth:ro --entrypoint smbclient "$IMG" //$IP/$SHARE -A /auth -m SMB3 -c 'ls' 2>&1 | tail -1
|
||||
rm -f "$A" "$B"
|
||||
echo "-- 3. nmbd: NetBIOS name query from DooPlex"
|
||||
nmblookup -U $IP "$NAME" 2>&1 | tail -1
|
||||
echo "-- 4. avahi: mDNS A query for $NAME.local"
|
||||
python3 - "$NAME" <<'EOF'
|
||||
import socket, struct, sys, time
|
||||
name = sys.argv[1].lower() + ".local"
|
||||
q = struct.pack(">HHHHHH", 0, 0, 1, 0, 0, 0) + b"".join(bytes([len(p)]) + p.encode() for p in name.split(".")) + b"\0" + struct.pack(">HH", 1, 0x8001)
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(3)
|
||||
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
|
||||
s.sendto(q, ("224.0.0.251", 5353))
|
||||
try:
|
||||
while True:
|
||||
d, a = s.recvfrom(4096)
|
||||
if d[-4:] and len(d) > 12 and struct.unpack(">H", d[6:8])[0] > 0:
|
||||
print(f"answer from {a[0]}: {socket.inet_ntoa(d[-4:])} for {name}"); break
|
||||
except socket.timeout:
|
||||
print(f"NO mDNS answer for {name}")
|
||||
EOF
|
||||
echo "-- 5. wsdd: WS-Discovery Probe"
|
||||
python3 - <<'EOF'
|
||||
import socket, uuid
|
||||
probe = f'''<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:wsdp="http://schemas.xmlsoap.org/ws/2006/02/devprof"><soap:Header><wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To><wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action><wsa:MessageID>urn:uuid:{uuid.uuid4()}</wsa:MessageID></soap:Header><soap:Body><wsd:Probe><wsd:Types>wsdp:Device</wsd:Types></wsd:Probe></soap:Body></soap:Envelope>'''
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(3)
|
||||
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)
|
||||
s.sendto(probe.encode(), ("239.255.255.250", 3702))
|
||||
seen = []
|
||||
try:
|
||||
while True:
|
||||
d, a = s.recvfrom(65535)
|
||||
if b"ProbeMatches" in d:
|
||||
seen.append(a[0])
|
||||
except socket.timeout:
|
||||
pass
|
||||
print("ProbeMatches from:", sorted(set(seen)) or "NOBODY", "— the box (192.168.0.155) answered" if "192.168.0.155" in seen else "— the box did NOT answer")
|
||||
EOF
|
||||
echo "-- 6. processes in the samba container, and its image"
|
||||
ssh -o BatchMode=yes demo-hp "LC_ALL=C pct exec 9201 -- sh -c 'docker inspect felhom-samba --format \"{{.Config.Image}} created {{.Created}}\"; docker exec felhom-samba ps -o pid,comm,args | grep -E \"smbd|nmbd|wsdd|avahi|dbus|tini\" | grep -v grep | cut -c1-90; docker volume ls -q | grep -i samba'" 2>/dev/null
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# R-1107 — restic 0.19.1 vs 0.18.1 vs 0.14.0 on demo-hp's REAL store, read-only (rx.sh: --no-lock, read verbs only).
|
||||
# Runs in the guest. Each snapshot is restored by every version; the tree hashes must agree.
|
||||
set -u
|
||||
I=gitea.dooplex.hu/admin/felhom-controller
|
||||
declare -A IMG=([0.14.0]=$I:0.322.0 [0.18.1]=$I:0.323.0 [0.19.1]=$I:0.324.0-rc.1)
|
||||
for v in 0.14.0 0.18.1 0.19.1; do docker image inspect ${IMG[$v]} >/dev/null 2>&1 || docker pull -q ${IMG[$v]} >/dev/null; done
|
||||
NEW19=$(/root/rx.sh ${IMG[0.19.1]} snapshots --tag bookstack --json 2>/dev/null | python3 -c 'import json,sys; s=[x for x in json.load(sys.stdin) if x.get("program_version","").startswith("restic 0.19")]; print(s[-1]["short_id"] if s else "")')
|
||||
echo "snapshots: 0.14.0-made f3f16e0e (bookstack), 0.18.1-made 6d9dd607 (rallly), 0.19.1-made $NEW19 (bookstack, newest)"
|
||||
for snap in f3f16e0e 6d9dd607 $NEW19; do
|
||||
line="$snap:"
|
||||
for v in 0.14.0 0.18.1 0.19.1; do
|
||||
d=/tmp/r1105/x-$snap-$v; rm -rf $d
|
||||
if /root/rx.sh ${IMG[$v]} restore $snap --target $d >/dev/null 2>&1; then
|
||||
h=$(cd $d && find . -type f -exec sha256sum {} + | sort -k2 | sha256sum | cut -c1-16); n=$(find $d -type f | wc -l)
|
||||
line="$line restic $v → $h ($n files)"
|
||||
else line="$line restic $v → FAILED"; fi
|
||||
rm -rf $d
|
||||
done
|
||||
echo "$line"
|
||||
done
|
||||
echo "store listed by each: $(for v in 0.14.0 0.18.1 0.19.1; do printf '%s=%s ' $v $(/root/rx.sh ${IMG[$v]} snapshots --json 2>/dev/null | python3 -c 'import json,sys;print(len(json.load(sys.stdin)))'); done)"
|
||||
Reference in New Issue
Block a user