Persistence re-sweep of all 58 (R-801 closed: CLEAN 40 / UNDETERMINED 18 / BROKEN 0), R-788 + R-803 (papra) closed, R-804..R-807 opened; STATUS "Before the first paying customer"; REPORT-persistence-sweep-2026-10-02; register 442
gates / gates (push) Successful in 30s
gates / gates (push) Successful in 30s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -16,6 +16,14 @@
|
||||
> and holds nothing of its own; this file does hold its own content, namely the standing rulings below.
|
||||
|
||||
|
||||
> **2026-10-02 (afternoon) — the persistence re-sweep (R-801/R-788 CLOSED), controller v0.288.0 (R-800), golden 0.288.0.**
|
||||
> Rulings `09` §3 66 (licences: Tandoor like SparkyFitness; Emby/Plex/n8n kept; lawyer review before the first paying
|
||||
> customer, R-802) and 67 (userdata stays on every remove; dialog + result name it — `07` §6.5). The gate now sends
|
||||
> requests (port from the label NAME), calls the app's own fixture seed when a volume stays empty, and reads an empty
|
||||
> declared volume as UNDETERMINED. All 58: CLEAN 39 · UNDETERMINED 19 · BROKEN 0 (no data-loss finding). papra's
|
||||
> 256M limit OOM-killed every fresh install — 768M now (R-803 closed). Open follow-ups R-804..R-807. Report:
|
||||
> `REPORT-persistence-sweep-2026-10-02.md`.
|
||||
|
||||
> **2026-10-02 — the family gate BUILT (R-780 CLOSED), controller v0.287.0 floored, golden 0.287.0 vouched; Grimmory and
|
||||
> MeTube published behind it (R-767 CLOSED, R-775 narrowed).** `internal/family` + `stacks/family_gate.go` +
|
||||
> `web/family_gate.go`; template fields `family_gate` / `family_gate_except` (literal, anchored `^/p(/|$)`) /
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
# REPORT — every app checked again with the fixed persistence check; the remove dialog tells the truth; licence rulings; v0.288.0 + golden (2026-10-02, afternoon)
|
||||
|
||||
Architecture read: `07-backup-architecture.md` §6 (tiers) and §6.5 (kept data — now with decision 67), `09` §3 decisions
|
||||
36, 65, 66, 67. Evidence root: `documentation/audits/persistence-sweep-2026-10-02/`.
|
||||
|
||||
| Part | State | One line |
|
||||
|---|---|---|
|
||||
| **A** — the re-sweep (R-801) | **DONE** | R-788 rule + the app's own fixture seed in the gate; all 58 on the bench; **0 BROKEN**; papra's start-up defect found and fixed (R-803). |
|
||||
| **B** — the remove dialog (R-800) | **DONE** | v0.288.0: `userdata_kept` in the dialog data and both results; the sentence in both languages; red-proofed; live on 9202. |
|
||||
| **C** — release, floor, golden | **DONE** | Floor 0.288.0 (min_agent 0.131.0), both demo boxes in 20 s; golden 0.288.0 baked, round-tripped, vouched; currency gate OK. |
|
||||
| Rulings | **RECORDED** | `09` §3 66 (licences) and 67 (userdata stays); `07` §6.5; STATUS "Before the first paying customer". |
|
||||
|
||||
**Sweep headline (58 templates):** before (2026-08-02, 53 apps, + the new apps' records) CLEAN 38 · UNDETERMINED 11 ·
|
||||
BROKEN 4 — **every one of those decided by start-time writes alone** → now **CLEAN 40 · UNDETERMINED 18 · BROKEN 0 ·
|
||||
INCONCLUSIVE 0** (39 · 19 in the sweep; papra CLEAN after its fix). The August BROKEN four (gramps-web, papra, privatebin,
|
||||
wishlist) were fixed in Campaign 10; none is BROKEN now. **No data-loss finding: no app writes outside a preserved folder.**
|
||||
|
||||
## Claims in the brief, checked
|
||||
|
||||
- **"Every stored verdict came only from start-time writes"** — RIGHT for the August sweep: 0 of 53 probes had sent a
|
||||
request (`ports: []`, `exercise: []` in every `probe.json`). Not quite for today's morning runs of MeTube and
|
||||
Grimmory, which ran after the R-801 fix.
|
||||
- **"The upgrade fixtures can serve as exercisers"** — PARTLY. 51 of 58 apps have one; the gate called it for 16 apps;
|
||||
it decided 2 (metube, privatebin). 13 seeded fine and stayed UNDETERMINED, because the seeds write only to the
|
||||
database — upload / media / cache / redis volumes stay empty (R-807). plex's seed cannot run (a plex.tv claim token).
|
||||
- **"Userdata is never touched by a remove"** — RIGHT, and it was already true before this session: the remove reads
|
||||
`${HDD_PATH}` binds only, pinned since R-442 (`TestRemoveStack_R442_UserdataConventionFromPerAppPath`). What was
|
||||
wrong was only that nothing SAID so. Measured again on 9202 (the video stayed).
|
||||
- **The R-788 decoy as written ("an app that writes nothing → exit 2, red on the old rule")** — the old rule already gave
|
||||
exit 2 for an app that writes nothing. The real gap was an app that writes SOMEWHERE while a declared volume stays
|
||||
empty (old: CLEAN). The decoy was built for that shape and seen red (`A/RP-R788-empty-volume.txt`).
|
||||
|
||||
## Part A — the sweep
|
||||
|
||||
Gate changes (catalog): an empty declared volume after the exercise is UNDETERMINED (R-788, red-proofed; three old tests
|
||||
pinned the old rule and changed with it); when a volume stays empty the gate calls the app's own upgrade-fixture seed
|
||||
(one call through `upgrade_fixtures` / `upgrade_boxport`, as `upgrade-test.py` does — it replaces the morning's
|
||||
MeTube-only exerciser). Bench 9401 on demo-hp, 200G, swap 0, Docker Hub logged in, 8 batches; full table with reasons:
|
||||
`A/sweep/TABLE.md`; verdict lines in the catalog: `audits/persistence-sweep-2026-10-02/verdicts.txt`.
|
||||
|
||||
| app | before | now | what made it write | notes |
|
||||
|---|---|---|---|---|
|
||||
| actualbudget | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| adventurelog | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| audiobookshelf | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| bentopdf | UNDETERMINED (08-02, start writes) | UNDETERMINED | deep pass | nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data |
|
||||
| bookstack | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| calcom | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| calibre-web | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | calibre-web: /app/calibre-web-automated/empty_library — database file(s) touched but byte-identical to the ima |
|
||||
| claper | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Claper: seed OK — claper: see | claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write |
|
||||
| code-server | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| crafty-controller | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Crafty: seed OK — crafty: POS | crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to writ |
|
||||
| dawarich | CLEAN (10-01, start writes) | UNDETERMINED | fixture seed OK — `fixture Dawarich: seed OK — dawarich: | dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the t |
|
||||
| docmost | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Docmost: seed OK — docmost: / | docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where |
|
||||
| emby | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| ghost | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| gitea | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| glance | UNDETERMINED (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| gokapi | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| grafana | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| gramps-web | BROKEN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture GrampsWeb: seed OK — gramps-w | gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the |
|
||||
| grimmory | CLEAN (10-02, after R-801) | CLEAN | GET exercise (or start) | grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] — benign whe |
|
||||
| home-assistant | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| homebox | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| homepage | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| immich | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Immich: seed OK — immich: see | immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write w |
|
||||
| jellyfin | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| karakeep | CLEAN (10-01, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| kimai | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| komga | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| mealie | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| metube | CLEAN (10-02, after R-801) | CLEAN | fixture seed OK — `fixture MeTube: seed OK — metube: the | - |
|
||||
| n8n | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| navidrome | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| nextcloud | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| onlyoffice | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24 |
|
||||
| opengist | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| outline | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Outline: seed OK — outline: s | outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write wh |
|
||||
| paperless-ngx | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| papra | BROKEN (08-02, start writes) | CLEAN after the fix (768M); UNDETERMINED at 256M (OOM) | nothing answered HTTP | R-803: OOM-killed at 256M; fixed |
|
||||
| plant-it | UNDETERMINED (08-02, start writes) | UNDETERMINED | start only (no routed port, no HTTP exercise) | no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': |
|
||||
| plex | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed FAILED — `fixture NoRoute: seed returned nothin | plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the templa |
|
||||
| privatebin | BROKEN (08-02, start writes) | CLEAN | fixture seed OK — `fixture PrivateBin: seed OK — private | - |
|
||||
| radarr | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | radarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['mov |
|
||||
| radicale | CLEAN (10-01, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| rallly | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| recipe-importer | UNDETERMINED (08-02, start writes) | UNDETERMINED | deep pass | NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are e |
|
||||
| romm | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| seerr | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| sonarr | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | sonarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['tv' |
|
||||
| sparkyfitness | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Sparkyfitness: seed OK — spar | sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app wa |
|
||||
| tandoor | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Django: seed OK — tandoor: se | tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write |
|
||||
| termix | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| uptime-kuma | UNDETERMINED (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| vaultwarden | CLEAN (08-02, start writes) | CLEAN | GET exercise (or start) | - |
|
||||
| vikunja | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Vikunja: seed OK — vikunja: c | vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where |
|
||||
| wanderer | UNDETERMINED (08-02, start writes) | UNDETERMINED | GET exercise (or start) | wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not show |
|
||||
| wger | CLEAN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Wger: seed OK — wger: POST /a | wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the |
|
||||
| wishlist | BROKEN (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Wishlist: seed OK — wishlist: | wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write wh |
|
||||
| zipline | UNDETERMINED (08-02, start writes) | UNDETERMINED | fixture seed OK — `fixture Zipline: seed OK — zipline: / | zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where t |
|
||||
|
||||
**REFUSED (BROKEN): none** — so no P1 data-loss row, no stop, no box to name.
|
||||
|
||||
**UNDETERMINED, why:** 13 apps — a second volume (uploads / media / cache / redis / backup) stays empty after a
|
||||
successful seed that writes only the database (claper, crafty-controller, dawarich, docmost, gramps-web, immich, outline,
|
||||
sparkyfitness, tandoor, vikunja, wger, wishlist, zipline — R-807). plex — no seed route (a plex.tv claim token).
|
||||
bentopdf — stateless by design (no volume; a browser-side PDF tool). recipe-importer — stateless converter (its /data is
|
||||
never written). wanderer — unhealthy under the gate, no fixture. plant-it — its image is gone from Docker Hub (R-804).
|
||||
|
||||
**Found and fixed on the way: papra (R-803, P1).** At its 256M limit every fresh install was OOM-killed in its
|
||||
migration and crash-looped (its 26.6.2 step was proven by harness v1, without a memory watch). Measured from birth: peak
|
||||
anon 405 MiB, cgroup peak 483 MiB, ~255 MiB idle. Now 768M (`mem_request` 256M): healthy in 31 s, 0 kills, the seed
|
||||
read back, persistence CLEAN (`A/papra/`). No box ran papra.
|
||||
|
||||
`EXISTING-APPS-GAPS.md` regenerated from the new verdicts (storage 38 → 36 of 53); records 2.1 updated (radicale,
|
||||
karakeep, grimmory, metube CLEAN; dawarich done with the redis volume named; sparkyfitness and wger open).
|
||||
|
||||
## Part B — the remove dialog (controller v0.288.0)
|
||||
|
||||
`GET /api/stacks/{name}/hdd-data`, `POST …/remove`, `DELETE /api/stacks/{name}` carry `userdata_kept` (always a
|
||||
list). Both dialogs and both results: „A fájljaid ezekben a mappákban megmaradnak — a fájlböngészőben látod őket:" /
|
||||
"Your files in these folders stay — you see them in the file browser:" + the folders. The false "no data on a drive" note
|
||||
is gone when userdata exists. Tests + red-proof (two mutants, `B/RP-R800-mutants.txt`); parity fixtures regenerated —
|
||||
additions only, 0 deletions, 109 pages. **Live on 9202** (`B/r800-9202.txt`, endpoint-level, no browser): MeTube from the
|
||||
live catalog, one download; the dialog's data names the folder; the page carries the line in hu and en (with a negative
|
||||
control); remove with data → 409 on 9202 (no host agent, R-442 — the with-data result is pinned by the unit test);
|
||||
remove keeping data → the result names the folder; the video still there.
|
||||
|
||||
## Part C — release
|
||||
|
||||
Controller v0.288.0 (`580b656`), image built from the pushed tree. Floor 0.288.0 + min_agent 0.131.0 → demo-hp and
|
||||
demo-felhom on 0.288.0 in 20 s (`C/floor.txt`). Golden 0.288.0: sha `436fdfa1…`, round trip equal, vouched (golden 0.288.0
|
||||
/ agent 0.138.0 / min_agent 0.131.0), R-120 refused 0.287.0 after; `golden_currency_gate.py`: "OK — the newest released
|
||||
controller has a golden" (`documentation/tests/golden-0.288.0-2026-10-02/`).
|
||||
|
||||
## Rows
|
||||
|
||||
Register **436 → 442**. Closed: R-788, R-790, R-791, R-792, R-795, R-801, R-803. Updated: R-789 (Tandoor — trigger),
|
||||
R-800 (ruled A, built). Opened: R-802 (lawyer review), R-804 (plant-it image gone), R-805 (empty binds not judged),
|
||||
R-806 (https backends / gramps-web first GET), R-807 (seeds that write only the database).
|
||||
|
||||
## Teardown
|
||||
|
||||
- **Bench 9401:** built and destroyed twice; `pct list` 9201 + 9202 only; nvme-scratch back to its baseline (+120 KiB).
|
||||
Docker Hub credentials shredded on DooPlex, demo-hp and the bench; `docker logout` before the destroy.
|
||||
- **9202:** MeTube removed (keeping data — with data refused by R-442), the harness's own test folder removed by hand;
|
||||
controller 0.288.0; live catalog.
|
||||
- **Hub:** the floor and the artifact manifest changed on purpose; nothing else. Tester-2: not touched.
|
||||
@@ -2,69 +2,52 @@
|
||||
|
||||
**Ready for the first real tester (Tester-2): yes. You confirmed the tunnel route and the connect mails (2026-09-30).**
|
||||
|
||||
**Updated 2026-10-02. Both demo boxes run controller 0.287.0 and host agent 0.138.0. Hub 0.126.0. New installs get
|
||||
golden 0.287.0 with agent 0.138.0.**
|
||||
**Updated 2026-10-02 (afternoon). Both demo boxes run controller 0.288.0 and host agent 0.138.0. Hub 0.126.0. New
|
||||
installs get golden 0.288.0 with agent 0.138.0.**
|
||||
|
||||
**Tester-2 — read only, from the hub.** The customer record exists. Tester-2's box has not registered yet.
|
||||
|
||||
## Today: the family gate is built
|
||||
## Today (afternoon): every app checked again
|
||||
|
||||
- **What it is:** a door in front of chosen apps. Only the family gets in. Each family member has their own name and
|
||||
password. You add, reset and remove them on the dashboard: Settings → Security → **Család** card.
|
||||
- **Grimmory (e-books) is published behind it.** Strangers cannot reach its login any more, so they cannot lock you out.
|
||||
E-readers (Kobo, KOReader, OPDS apps) still work with Grimmory's own login.
|
||||
- **MeTube (video downloads) is published behind it.** It has no login of its own, so the gate is its only door. The page
|
||||
says: download only what you have the right to.
|
||||
- **Measured on the scratch box and on demo-hp:** a stranger reached nothing; a stranger's wrong guesses locked only that
|
||||
stranger; a removed family member was out at the next click; backup, remove and restore kept the gate.
|
||||
- **Phone test: skipped** — you were not here. A 2-minute test from your phone off wifi would prove the real-internet
|
||||
family sign-in by a person, not by me.
|
||||
- **No data-loss fault.** I checked all 58 apps with the fixed check. It made each app really save something, then
|
||||
looked where the data landed. **No app saves data where the backup does not copy it.**
|
||||
- **40 apps: proven correct. 18 apps: not proven either way.** In those 18 the check could not fill every folder (for
|
||||
example an upload folder stays empty because my test saves no upload). Nothing was found outside a backed-up folder.
|
||||
I list them and work on them later.
|
||||
- **papra was broken for new installs, now fixed.** It needs more memory than its limit, so a fresh install crashed in a
|
||||
loop. I measured it and raised the limit. No box runs papra.
|
||||
- **plant-it's program image is gone from Docker Hub.** It is already hidden from new installs. No box runs it.
|
||||
|
||||
## Licences: all 58 apps read
|
||||
## Removing an app now tells the truth (your choice A)
|
||||
|
||||
Most are open source. These need your word (nothing was hidden or changed):
|
||||
- When the household removes an app, its own files (books, videos) **stay**. The dialog and the result now say so, and
|
||||
name the folder. Proven on the scratch box: the video was still there after the remove.
|
||||
|
||||
| App | The licence says | Choose: keep / hide / ask | I would |
|
||||
|---|---|---|---|
|
||||
| **Tandoor** | You may not sell a service whose value comes mostly from it (paid hosting and support named). | | ask the authors; keep meanwhile |
|
||||
| **Emby** | Personal, non-commercial use only. Jellyfin does the same job. | | hide for new installs |
|
||||
| **SparkyFitness** | Commercial use needs the author's written permission. (Decided: keep, ask.) | — | send the e-mail draft |
|
||||
| n8n | Own or personal use is fine; giving it to others only free of charge. | | keep |
|
||||
| Plex | Your household is the licensee with its own Plex account. | | keep |
|
||||
| recipe-importer | Our own app — it has no licence file. | | pick one |
|
||||
## Before the first paying customer
|
||||
|
||||
Four apps carry paid "enterprise" parts that stay switched off (Cal.com, Docmost, Outline, search in Wanderer), and seven
|
||||
apps use Redis 7.4 as a private cache. Both are fine as they run; I watch them.
|
||||
Everything here must be done before the first customer who pays:
|
||||
|
||||
**SparkyFitness e-mail:** drafted, NOT sent. The author has no public e-mail; the draft suggests their Discord.
|
||||
If no written permission arrives before the first paying customer, SparkyFitness gets hidden from new installs.
|
||||
1. **SparkyFitness:** written permission from the author (the e-mail draft is ready). If none → hidden from new installs.
|
||||
2. **Tandoor:** written permission from the authors. If none → hidden from new installs.
|
||||
3. **A lawyer reviews the licence list** (Tandoor, SparkyFitness, Emby, n8n, Plex, the paid "enterprise" parts, Redis).
|
||||
4. **Agent updates:** I may sign agent updates only until the first paying customer; after that you sign them.
|
||||
|
||||
Your licence decisions are recorded: Emby, Plex and n8n stay. recipe-importer needs nothing unless we share it.
|
||||
|
||||
## Also today
|
||||
|
||||
- **A new golden (0.287.0).** Baked early, because a box from the old golden would have shown the two apps without the
|
||||
gate until its first update. The catalog check now refuses that case.
|
||||
- **A bug in one catalog check, fixed:** the check "does the app keep its data where we back it up" never actually
|
||||
talked to any app. Fixed and proven; all apps must be checked again (my next work).
|
||||
- **Rows.** 3 closed, 14 opened (most are your licence choices). The list went from 422 to 436 rows.
|
||||
- **New version 0.288.0 and a new golden (0.288.0).**
|
||||
- **Rows.** 7 closed, 6 opened. The list went from 436 to 442 rows.
|
||||
|
||||
## What needs you
|
||||
|
||||
1. **The licence table above:** keep, hide or ask, per row. **If you say nothing:** everything stays offered.
|
||||
2. **Send the SparkyFitness request** (the draft is ready). **If you do nothing:** it gets hidden before the first paying
|
||||
customer.
|
||||
3. **Removing an app "with data" keeps its files** (Grimmory's books, MeTube's videos) in the household folder, and
|
||||
the dialog does not say so. **Choose:** keep them and say so on the dialog (I would), or delete the app's own folder
|
||||
too. **If you say nothing:** files stay, the dialog stays silent.
|
||||
4. **Demo box apps:** I installed Grimmory and MeTube on demo-hp for the test and removed them after. Want them kept
|
||||
there for showing? **If you say nothing:** they stay removed.
|
||||
5. **One phone test (2 minutes), only if you want it:** say so, and I put MeTube back on demo-hp and give you a family
|
||||
login; you open `video.enkisfelhom.hu` on your phone off wifi. **If you say nothing:** the proof stays my real-internet
|
||||
test from here.
|
||||
6. Still open: Invidious and moonlight-web — I advise no to both. Pinchflat stays stopped (upstream paused).
|
||||
1. **plant-it:** keep the hidden template as it is, or remove it entirely (its image no longer exists). **If you say
|
||||
nothing:** it stays hidden; nothing runs it.
|
||||
2. **Send the SparkyFitness request, and ask the Tandoor authors** (the "Before the first paying customer" list).
|
||||
3. **Phone test (2 minutes), only if you want it:** say so, and I put MeTube back on demo-hp with a family login.
|
||||
|
||||
## Standing steps
|
||||
|
||||
- **Monthly security re-test: last run 2026-10-01, next due ~2026-11-01.** (You start it with the standing brief.)
|
||||
- **Weekly:** the golden bake (next around 9 October; today's bake was 0.287.0).
|
||||
- **SparkyFitness:** written permission from the author before the first paying customer, or `lifecycle: hidden`.
|
||||
- **Weekly:** the golden bake (next around 9 October; today's bake was 0.288.0).
|
||||
- **Registry clean-up:** only when the registry disk fills; "show me" mode first, then a person decides.
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# R-803 — papra OOM under its 256M limit: birth measurement and proposed limit (2026-10-02, bench 9401 on demo-hp)
|
||||
|
||||
Bench: LXC 9401 `r803-papra` on demo-hp (debian-13 amd64, swap 0, nesting+keyctl, 60G rootfs on nvme-scratch,
|
||||
12 GiB). Code: catalog-wt febf58c + the uncommitted gate scripts. Image ghcr.io/papra-hq/papra:26.6.2-rootless.
|
||||
Driver: `r803_birth.py` (scratchpad). It deploys the template the way the volume gate does (same `build_env`, same scratch
|
||||
paths, `docker compose create` then `start`), samples the container's cgroup v2 every 2 s from creation
|
||||
(`memory.stat` anon/file, `memory.current`, `memory.peak`, `memory.events` oom/oom_kill/max, plus docker status/health/
|
||||
restarts/OOMKilled), seeds once and reads back once with papra's own upgrade fixture (`upgrade_fixtures_box.Papra` through
|
||||
`upgrade_boxport.get`), then idles 300 s. No Docker Hub login this time: the papra pull is from ghcr, and the canary base
|
||||
image pulled anonymously.
|
||||
|
||||
## 1. From birth, no limit (`birth-unlimited/`)
|
||||
The deploy block was removed in a separate run copy of the catalog (HostConfig.Memory=0).
|
||||
- healthy at 71.5 s (the image pull is included in that time), 0 restarts, `oom_kill` 0
|
||||
- **peak anon 425,029,632 B = 405.3 MiB**, sampled during first start/migration (4–28 s after start)
|
||||
- peak `memory.current` 427 MiB; the cgroup's own `memory.peak` (anon + file, catches what 2-s sampling misses) **483 MiB**
|
||||
- after healthy: anon ~356 MiB for ~2 min, then settles at **~254 MiB idle**, which is already near the old 256M limit
|
||||
- fixture: `papra: sign-up http=200` → seed OK; `papra: sign-in as the seeded account http=200 ok=True` → read back **true**
|
||||
- volume after the run: `db/db.sqlite (581632 B)` in the `/app/app-data` volume
|
||||
|
||||
## 2. Proposed limit
|
||||
405.3 MiB × 1.6 = 648 MiB → next catalog step **768M**. 768M also covers the highest `memory.peak` seen (483 MiB) at 1.59×.
|
||||
The bench template diff is in `template.diff`. It is NOT applied to the repo.
|
||||
|
||||
## 3. From birth at 768M (`run-768M/`)
|
||||
- HostConfig.Memory=805306368 (768 MiB); `memory.max` = 805306368
|
||||
- healthy at 31.0 s, final status running/healthy, **restarts 0, oom_kill 0, OOMKilled false**
|
||||
- fixture seed OK, read back **true**
|
||||
- peak anon 297,943,040 B = 284.1 MiB, `memory.peak` 341 MiB, idle end anon 251 MiB. This run peaked lower than the
|
||||
unlimited run: the start-up peak varies between runs (memory.peak 341–483 MiB over two runs), so do not size from one run.
|
||||
- gate (`gate-papra-768M.txt`, probe in `gate-evidence/papra/probe.json`), verbatim:
|
||||
`papra CLEAN` / `1 clean · 0 broken · 0 undetermined (of 1 in scope)` / `volume-persistence gate OK` /
|
||||
`check-volume-persistence exit code = 0`. Exercise `172.18.0.2:1221/ -> 200`; `/app/app-data` holds `db/db.sqlite`.
|
||||
|
||||
Note: `mem_request: "50M"` in `.felhom.yml` was left unchanged (not in scope). Measured idle is ~255 MiB.
|
||||
@@ -0,0 +1,55 @@
|
||||
+ date -u
|
||||
Fri Oct 2 14:34:42 UTC 2026
|
||||
+ pct list
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19536696 18829564 48.29%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 77370636 855982452 7.87%
|
||||
+ pct config 9401
|
||||
+ head -1
|
||||
Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist
|
||||
+ pveam list local
|
||||
+ grep debian-13
|
||||
local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst 123.93MB
|
||||
+ pct create 9401 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst --hostname r803-papra --cores 6 --memory 12288 --swap 0 --rootfs nvme-scratch:60 --net0 name=eth0,bridge=vmbr0,ip=dhcp --unprivileged 1 --features nesting=1,keyctl=1 --onboot 0
|
||||
+ tail -1
|
||||
done: SHA256:ZxJabA9hzMBYA+4Go9i2Ook9/pAunGUO4EgXoYQEGq0 root@r803-papra
|
||||
+ pct config 9401
|
||||
arch: amd64
|
||||
cores: 6
|
||||
features: nesting=1,keyctl=1
|
||||
hostname: r803-papra
|
||||
memory: 12288
|
||||
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:FA:53:74,ip=dhcp,type=veth
|
||||
onboot: 0
|
||||
ostype: debian
|
||||
rootfs: nvme-scratch:9401/vm-9401-disk-0.raw,size=60G
|
||||
swap: 0
|
||||
unprivileged: 1
|
||||
+ pct start 9401
|
||||
+ sleep 15
|
||||
+ pct exec 9401 -- bash -c 'dpkg --print-architecture; hostname; ip -4 -o addr show eth0 | awk "{print \$4}"; apt-get update -qq >/dev/null 2>&1; DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker.io docker-compose python3 python3-yaml curl postgresql-client sqlite3 git >/dev/null 2>&1; docker --version; docker compose version; python3 --version; git --version; docker network create traefik-public >/dev/null && echo traefik-public-net; swapon --show; free -m | head -3; df -h /'
|
||||
amd64
|
||||
r803-papra
|
||||
192.168.0.100/24
|
||||
Docker version 26.1.5+dfsg1, build a72d7cd
|
||||
Docker Compose version 2.26.1-4
|
||||
Python 3.13.5
|
||||
git version 2.47.3
|
||||
traefik-public-net
|
||||
total used free shared buff/cache available
|
||||
Mem: 12288 61 10577 0 1649 12226
|
||||
Swap: 0 0 0
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/loop2 59G 1.3G 55G 3% /
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19536788 18829472 48.29%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 78967692 854385396 8.03%
|
||||
@@ -0,0 +1,169 @@
|
||||
t_s,phase,status,health,restarts,oomkilled_flag,exit,limit_bytes,current_bytes,peak_bytes,anon_bytes,file_bytes,ev_oom,ev_oom_kill,ev_max,cgroup
|
||||
40.8,start,created,,0,false,0,,,,,,,,,no
|
||||
42.8,start,running,starting,0,false,0,,214106112,214372352,202956800,8192,0,0,0,yes
|
||||
44.8,start,running,starting,0,false,0,,381394944,381628416,365441024,831488,0,0,0,yes
|
||||
46.8,start,running,starting,0,false,0,,242147328,419913728,218886144,3166208,0,0,0,yes
|
||||
48.8,start,running,starting,0,false,0,,447975424,506306560,425029632,3166208,0,0,0,yes
|
||||
50.8,start,running,starting,0,false,0,,447565824,506306560,425029632,3166208,0,0,0,yes
|
||||
52.8,start,running,starting,0,false,0,,447561728,506306560,425029632,3166208,0,0,0,yes
|
||||
54.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes
|
||||
56.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes
|
||||
58.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes
|
||||
60.8,start,running,starting,0,false,0,,447344640,506306560,425029632,3166208,0,0,0,yes
|
||||
62.8,start,running,starting,0,false,0,,447340544,506306560,425029632,3166208,0,0,0,yes
|
||||
64.8,start,running,starting,0,false,0,,447340544,506306560,425029632,3166208,0,0,0,yes
|
||||
66.8,start,running,starting,0,false,0,,447336448,506306560,425029632,3166208,0,0,0,yes
|
||||
68.8,start,running,starting,0,false,0,,447336448,506306560,425029632,3166208,0,0,0,yes
|
||||
70.8,start,running,starting,0,false,0,,447336448,506306560,425029632,3166208,0,0,0,yes
|
||||
72.8,idle,running,healthy,0,false,0,,393814016,506306560,372817920,3293184,0,0,0,yes
|
||||
74.8,idle,running,healthy,0,false,0,,393834496,506306560,372817920,3293184,0,0,0,yes
|
||||
76.8,idle,running,healthy,0,false,0,,393703424,506306560,372817920,3420160,0,0,0,yes
|
||||
78.8,idle,running,healthy,0,false,0,,393703424,506306560,372817920,3420160,0,0,0,yes
|
||||
80.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes
|
||||
82.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes
|
||||
84.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes
|
||||
86.8,idle,running,healthy,0,false,0,,394362880,506306560,372817920,4063232,0,0,0,yes
|
||||
88.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
90.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
92.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
94.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
96.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
98.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
100.8,idle,running,healthy,0,false,0,,394338304,506306560,372817920,4063232,0,0,0,yes
|
||||
102.8,idle,running,healthy,0,false,0,,394354688,506306560,372834304,4063232,0,0,0,yes
|
||||
104.8,idle,running,healthy,0,false,0,,394354688,506306560,372834304,4063232,0,0,0,yes
|
||||
106.8,idle,running,healthy,0,false,0,,394354688,506306560,372834304,4063232,0,0,0,yes
|
||||
108.8,idle,running,healthy,0,false,0,,394362880,506306560,372834304,4063232,0,0,0,yes
|
||||
110.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
112.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
114.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
116.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
118.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
120.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
122.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
124.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
126.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
128.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
130.8,idle,running,healthy,0,false,0,,394362880,506306560,372842496,4063232,0,0,0,yes
|
||||
132.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
134.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
136.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
138.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
140.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
142.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
144.8,idle,running,healthy,0,false,0,,394366976,506306560,372846592,4063232,0,0,0,yes
|
||||
146.8,idle,running,healthy,0,false,0,,382656512,506306560,361402368,4063232,0,0,0,yes
|
||||
148.8,idle,running,healthy,0,false,0,,382656512,506306560,361402368,4063232,0,0,0,yes
|
||||
150.8,idle,running,healthy,0,false,0,,370569216,506306560,349626368,4063232,0,0,0,yes
|
||||
152.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes
|
||||
154.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes
|
||||
156.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes
|
||||
158.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes
|
||||
160.8,idle,running,healthy,0,false,0,,370315264,506306560,349626368,4063232,0,0,0,yes
|
||||
162.8,idle,running,healthy,0,false,0,,370638848,506306560,349786112,4063232,0,0,0,yes
|
||||
164.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes
|
||||
166.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes
|
||||
168.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes
|
||||
170.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes
|
||||
172.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes
|
||||
174.8,idle,running,healthy,0,false,0,,370462720,506306560,349786112,4063232,0,0,0,yes
|
||||
176.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
178.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
180.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
182.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
184.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
186.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
188.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
190.8,idle,running,healthy,0,false,0,,287952896,506306560,269946880,4063232,0,0,0,yes
|
||||
192.8,idle,running,healthy,0,false,0,,288079872,506306560,269955072,4063232,0,0,0,yes
|
||||
194.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
196.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
198.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
200.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
202.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
204.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
206.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
208.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
210.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
212.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
214.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
216.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
218.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
220.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
222.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
224.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
226.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
228.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
230.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
232.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
234.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
236.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
238.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
240.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
242.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
244.8,idle,running,healthy,0,false,0,,287961088,506306560,269955072,4063232,0,0,0,yes
|
||||
246.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
248.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
250.8,idle,running,healthy,0,false,0,,287956992,506306560,269955072,4063232,0,0,0,yes
|
||||
252.8,idle,running,healthy,0,false,0,,287227904,506306560,268812288,4063232,0,0,0,yes
|
||||
254.8,idle,running,healthy,0,false,0,,286973952,506306560,268812288,4063232,0,0,0,yes
|
||||
256.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
258.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
260.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
262.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
264.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
266.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
268.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
270.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
272.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
274.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
276.8,idle,running,healthy,0,false,0,,285609984,506306560,267698176,4063232,0,0,0,yes
|
||||
278.8,idle,running,healthy,0,false,0,,285605888,506306560,267698176,4063232,0,0,0,yes
|
||||
280.8,idle,running,healthy,0,false,0,,285605888,506306560,267698176,4063232,0,0,0,yes
|
||||
282.8,idle,running,healthy,0,false,0,,284278784,506306560,266403840,4063232,0,0,0,yes
|
||||
284.8,idle,running,healthy,0,false,0,,284278784,506306560,266403840,4063232,0,0,0,yes
|
||||
286.8,idle,running,healthy,0,false,0,,284278784,506306560,266403840,4063232,0,0,0,yes
|
||||
288.8,idle,running,healthy,0,false,0,,284282880,506306560,266403840,4063232,0,0,0,yes
|
||||
290.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
292.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
294.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
296.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
298.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
300.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
302.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
304.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
306.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
308.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
310.8,idle,running,healthy,0,false,0,,284282880,506306560,266407936,4063232,0,0,0,yes
|
||||
312.8,idle,running,healthy,0,false,0,,284483584,506306560,266600448,4063232,0,0,0,yes
|
||||
314.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
316.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
318.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
320.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
322.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
324.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
326.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
328.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
330.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
332.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
334.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
336.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
338.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
340.8,idle,running,healthy,0,false,0,,284475392,506306560,266600448,4063232,0,0,0,yes
|
||||
342.8,idle,running,healthy,0,false,0,,284672000,506306560,266784768,4063232,0,0,0,yes
|
||||
344.8,idle,running,healthy,0,false,0,,284672000,506306560,266784768,4063232,0,0,0,yes
|
||||
346.8,idle,running,healthy,0,false,0,,284672000,506306560,266784768,4063232,0,0,0,yes
|
||||
348.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
350.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
352.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
354.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
356.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
358.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
360.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
362.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
364.8,idle,running,healthy,0,false,0,,284667904,506306560,266784768,4063232,0,0,0,yes
|
||||
366.8,idle,running,healthy,0,false,0,,284663808,506306560,266784768,4063232,0,0,0,yes
|
||||
368.8,idle,running,healthy,0,false,0,,284663808,506306560,266784768,4063232,0,0,0,yes
|
||||
370.8,idle,running,healthy,0,false,0,,284663808,506306560,266784768,4063232,0,0,0,yes
|
||||
372.8,end,running,healthy,0,false,0,,285491200,506306560,267022336,4063232,0,0,0,yes
|
||||
374.8,end,running,healthy,0,false,0,,285114368,506306560,267022336,4063232,0,0,0,yes
|
||||
|
+41
@@ -0,0 +1,41 @@
|
||||
Error response from daemon: No such container: r803papra-papra-1
|
||||
{"level":"info","message":"Worker started","timestampMs":1790951826314,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}}
|
||||
{"level":"info","message":"Task worker started","timestampMs":1790951826314,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}}
|
||||
{"level":"info","message":"Worker started","timestampMs":1790951826314,"namespace":"app-server","data":{"processMode":"all"}}
|
||||
{"level":"info","message":"Server started","timestampMs":1790951826320,"namespace":"app-server","data":{"processMode":"all","port":1221}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790951826321,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents"}}
|
||||
{"level":"info","message":"Expired documents deleted","timestampMs":1790951826326,"namespace":"documents:tasks:hardDeleteExpiredDocuments","data":{"processMode":"all","deletedDocumentsCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951826327,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents","nextDate":"2026-10-02T22:00:00.000Z"}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790951826327,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations"}}
|
||||
{"level":"info","message":"Updated expired pending invitations status","timestampMs":1790951826329,"namespace":"organizations:tasks:expireInvitations","data":{"processMode":"all"}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951826330,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations","nextDate":"2026-10-02T22:00:00.000Z"}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790951826330,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations"}}
|
||||
{"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790951826331,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organizationCount":0}}
|
||||
{"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790951826331,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganizationCount":0,"totalOrganizationCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951826332,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations","nextDate":"2026-10-02T23:00:00.000Z"}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790951826332,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries"}}
|
||||
{"level":"info","message":"Purged expired kv-store entries","timestampMs":1790951826333,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951826333,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries","nextDate":"2026-10-03T00:00:00.000Z"}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951848895,"namespace":"app","data":{"processMode":"all","requestId":"req_n19dkxtm1114laxq56pdt27e","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":30}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951849138,"namespace":"app","data":{"processMode":"all","requestId":"req_fuvh1rragvh9x4bwi23xtldw","status":200,"method":"GET","path":"/api/health","routePath":"/api/health","userAgent":"curl/8.14.1","durationMs":9}}
|
||||
{"level":"warn","message":"Rate limiting skipped: could not determine client IP address. Ensure your runtime forwards a trusted client IP header and configure `advanced.ipAddress.ipAddressHeaders` if needed.","timestampMs":1790951849177,"namespace":"auth","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","args":[]}}
|
||||
{"level":"info","message":"User signed up","timestampMs":1790951849366,"namespace":"auth","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","userId":"usr_bpedfbxp4su8qak8owd9dpdp"}}
|
||||
{"level":"debug","message":"Event emitted","timestampMs":1790951849367,"namespace":"events-services","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventName":"user.created","eventId":"evt_zdo5df8yqve9uyf88pqpczef","handlerCount":2,"handlerNames":["roles.assign-admin-to-first-user","tracking.register-user-created-event"]}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951849368,"namespace":"app","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","status":200,"method":"POST","path":"/api/auth/sign-up/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":195}}
|
||||
{"level":"info","message":"Event handler executed successfully","timestampMs":1790951849371,"namespace":"events-services","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventId":"evt_zdo5df8yqve9uyf88pqpczef","eventName":"user.created","handlerName":"tracking.register-user-created-event"}}
|
||||
{"level":"info","message":"Admin role assigned to first user","timestampMs":1790951849382,"namespace":"events:first-user-admin","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventId":"evt_zdo5df8yqve9uyf88pqpczef","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user","userId":"usr_bpedfbxp4su8qak8owd9dpdp"}}
|
||||
{"level":"info","message":"Event handler executed successfully","timestampMs":1790951849383,"namespace":"events-services","data":{"processMode":"all","requestId":"req_tbxo45jr20ppa7lkfjgamsnz","eventId":"evt_zdo5df8yqve9uyf88pqpczef","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user"}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951849408,"namespace":"app","data":{"processMode":"all","requestId":"req_xesthg827fgu037234tgbykw","status":200,"method":"GET","path":"/","routePath":"/*","userAgent":"curl/8.14.1","durationMs":2}}
|
||||
{"level":"error","message":"Invalid password","timestampMs":1790951849562,"namespace":"auth","data":{"processMode":"all","requestId":"req_i44cjswl1ymsd6wyjo0tcc21","args":[]}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951849565,"namespace":"app","data":{"processMode":"all","requestId":"req_i44cjswl1ymsd6wyjo0tcc21","status":401,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":122}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951849726,"namespace":"app","data":{"processMode":"all","requestId":"req_imy82mapf1d7ocrq47anw0kn","status":200,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":125}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951879011,"namespace":"app","data":{"processMode":"all","requestId":"req_aiuro4gyph5iuh1zoyx28f0a","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951909117,"namespace":"app","data":{"processMode":"all","requestId":"req_kz6nixmhcggk34cgklgme0gc","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951939227,"namespace":"app","data":{"processMode":"all","requestId":"req_ene5chpio70s3ft9yrvtw8av","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951969347,"namespace":"app","data":{"processMode":"all","requestId":"req_rd77g9po617jwmediluqbmat","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790951999484,"namespace":"app","data":{"processMode":"all","requestId":"req_ujqsjgp3nns1aw6at86qo6y8","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952029581,"namespace":"app","data":{"processMode":"all","requestId":"req_vjf42i6srfie7anna1z1n8s7","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952059706,"namespace":"app","data":{"processMode":"all","requestId":"req_gwmg4mra5d9cidz6c5iyqgfn","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952089818,"namespace":"app","data":{"processMode":"all","requestId":"req_b67si316nwx7c6aoei0pdhwf","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952119931,"namespace":"app","data":{"processMode":"all","requestId":"req_bro2lsyac2l2ftgcvm9420wd","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952150053,"namespace":"app","data":{"processMode":"all","requestId":"req_w8ktugjx2gdzadz8u9mcwsgq","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
@@ -0,0 +1,39 @@
|
||||
[ 40.8s] compose create rc=0 container=1e1ace360792 HostConfig.Memory=0
|
||||
[ 41.2s] compose start rc=0
|
||||
[ 71.5s] healthy at 71.5s
|
||||
[ 71.8s] fixture seed -> OK (papra: sign-up http=200)
|
||||
[ 72.2s] fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True)
|
||||
[ 72.2s] idle 300s
|
||||
[ 375.2s] volume files: ['db/db.sqlite (581632 B)']
|
||||
{
|
||||
"app": "papra",
|
||||
"idle_s": 300,
|
||||
"fixture_said": [
|
||||
"papra: sign-up http=200",
|
||||
"papra: sign-in as the seeded account http=200 ok=True"
|
||||
],
|
||||
"seed_ok": true,
|
||||
"readback": true,
|
||||
"healthy_at_s": 71.5,
|
||||
"volume_files": [
|
||||
"db/db.sqlite (581632 B)"
|
||||
],
|
||||
"samples": 168,
|
||||
"peak_anon_bytes": 425029632,
|
||||
"peak_anon_by_phase": {
|
||||
"start": 425029632,
|
||||
"seed": null,
|
||||
"readback": null,
|
||||
"idle": 372846592,
|
||||
"end": 267022336
|
||||
},
|
||||
"idle_end_anon_bytes": 267022336,
|
||||
"peak_current_bytes": 447975424,
|
||||
"cgroup_memory_peak_bytes_max": 506306560,
|
||||
"oom_kill_max": 0,
|
||||
"final_status": "running",
|
||||
"final_health": "healthy",
|
||||
"final_restarts": "0",
|
||||
"final_oomkilled_flag": "false",
|
||||
"limit_bytes": null
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"app": "papra",
|
||||
"env_keys": [
|
||||
"AUTH_SECRET",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"idle_s": 300,
|
||||
"fixture_said": [
|
||||
"papra: sign-up http=200",
|
||||
"papra: sign-in as the seeded account http=200 ok=True"
|
||||
],
|
||||
"seed_ok": true,
|
||||
"readback": true,
|
||||
"healthy_at_s": 71.5,
|
||||
"volume_files": [
|
||||
"db/db.sqlite (581632 B)"
|
||||
],
|
||||
"samples": 168,
|
||||
"peak_anon_bytes": 425029632,
|
||||
"peak_anon_by_phase": {
|
||||
"start": 425029632,
|
||||
"seed": null,
|
||||
"readback": null,
|
||||
"idle": 372846592,
|
||||
"end": 267022336
|
||||
},
|
||||
"idle_end_anon_bytes": 267022336,
|
||||
"peak_current_bytes": 447975424,
|
||||
"cgroup_memory_peak_bytes_max": 506306560,
|
||||
"oom_kill_max": 0,
|
||||
"final_status": "running",
|
||||
"final_health": "healthy",
|
||||
"final_restarts": "0",
|
||||
"final_oomkilled_flag": "false",
|
||||
"limit_bytes": null,
|
||||
"events": [
|
||||
{
|
||||
"t": 40.8,
|
||||
"event": "compose create rc=0 container=1e1ace360792 HostConfig.Memory=0"
|
||||
},
|
||||
{
|
||||
"t": 41.2,
|
||||
"event": "compose start rc=0"
|
||||
},
|
||||
{
|
||||
"t": 71.5,
|
||||
"event": "healthy at 71.5s"
|
||||
},
|
||||
{
|
||||
"t": 71.8,
|
||||
"event": "fixture seed -> OK (papra: sign-up http=200)"
|
||||
},
|
||||
{
|
||||
"t": 72.2,
|
||||
"event": "fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True)"
|
||||
},
|
||||
{
|
||||
"t": 72.2,
|
||||
"event": "idle 300s"
|
||||
},
|
||||
{
|
||||
"t": 375.2,
|
||||
"event": "volume files: ['db/db.sqlite (581632 B)']"
|
||||
}
|
||||
]
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "papra",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 176,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 177,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/papra-hq/papra:26.6.2-rootless",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-papra_papra_data",
|
||||
"sample": [
|
||||
"db/db.sqlite"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-papra_papra_data/_data",
|
||||
"target": "/app/app-data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "papra",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"papra_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"AUTH_SECRET",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:1221/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
1221
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
# check-volume-persistence.py --evidence /root/gate-ev papra — 2026-10-02T14:49:11Z, bench 9401 r803-papra, catalog-wt febf58c + uncommitted gate scripts + BENCH-ONLY papra limit 768M (template.diff)
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
papra CLEAN
|
||||
|
||||
1 clean · 0 broken · 0 undetermined (of 1 in scope)
|
||||
volume-persistence gate OK
|
||||
check-volume-persistence exit code = 0
|
||||
@@ -0,0 +1,169 @@
|
||||
t_s,phase,status,health,restarts,oomkilled_flag,exit,limit_bytes,current_bytes,peak_bytes,anon_bytes,file_bytes,ev_oom,ev_oom_kill,ev_max,cgroup
|
||||
0.3,start,created,,0,false,0,,,,,,,,,no
|
||||
2.3,start,running,starting,0,false,0,805306368,216780800,216780800,206794752,8192,0,0,0,yes
|
||||
4.3,start,running,starting,0,false,0,805306368,305967104,305967104,291098624,770048,0,0,0,yes
|
||||
6.3,start,running,starting,0,false,0,805306368,244715520,358092800,221315072,2543616,0,0,0,yes
|
||||
8.3,start,running,starting,0,false,0,805306368,313176064,358092800,295247872,2543616,0,0,0,yes
|
||||
10.3,start,running,starting,0,false,0,805306368,312532992,358092800,295247872,2543616,0,0,0,yes
|
||||
12.3,start,running,starting,0,false,0,805306368,312352768,358092800,295247872,2543616,0,0,0,yes
|
||||
14.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
16.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
18.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
20.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
22.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
24.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
26.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
28.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
30.3,start,running,starting,0,false,0,805306368,312348672,358092800,295247872,2543616,0,0,0,yes
|
||||
32.3,idle,running,healthy,0,false,0,805306368,315858944,358092800,297943040,2670592,0,0,0,yes
|
||||
34.3,idle,running,healthy,0,false,0,805306368,315359232,358092800,297943040,2732032,0,0,0,yes
|
||||
36.3,idle,running,healthy,0,false,0,805306368,315330560,358092800,297943040,2732032,0,0,0,yes
|
||||
38.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
40.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
42.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
44.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
46.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
48.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
50.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
52.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
54.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
56.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
58.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
60.3,idle,running,healthy,0,false,0,805306368,316055552,358092800,297943040,3440640,0,0,0,yes
|
||||
62.3,idle,running,healthy,0,false,0,805306368,316231680,358092800,297943040,3440640,0,0,0,yes
|
||||
64.3,idle,running,healthy,0,false,0,805306368,316231680,358092800,297943040,3440640,0,0,0,yes
|
||||
66.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
68.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
70.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
72.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
74.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
76.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
78.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
80.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
82.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
84.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
86.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
88.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
90.3,idle,running,healthy,0,false,0,805306368,316039168,358092800,297943040,3440640,0,0,0,yes
|
||||
92.3,idle,running,healthy,0,false,0,805306368,316313600,358092800,297943040,3440640,0,0,0,yes
|
||||
94.3,idle,running,healthy,0,false,0,805306368,316313600,358092800,297943040,3440640,0,0,0,yes
|
||||
96.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes
|
||||
98.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes
|
||||
100.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes
|
||||
102.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes
|
||||
104.3,idle,running,healthy,0,false,0,805306368,316043264,358092800,297943040,3440640,0,0,0,yes
|
||||
106.3,idle,running,healthy,0,false,0,805306368,307179520,358092800,289411072,3440640,0,0,0,yes
|
||||
108.3,idle,running,healthy,0,false,0,805306368,307179520,358092800,289411072,3440640,0,0,0,yes
|
||||
110.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes
|
||||
112.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes
|
||||
114.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes
|
||||
116.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes
|
||||
118.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes
|
||||
120.3,idle,running,healthy,0,false,0,805306368,298618880,358092800,281153536,3440640,0,0,0,yes
|
||||
122.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
124.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
126.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
128.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
130.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
132.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
134.3,idle,running,healthy,0,false,0,805306368,298745856,358092800,281284608,3440640,0,0,0,yes
|
||||
136.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
138.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
140.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
142.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
144.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
146.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
148.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
150.3,idle,running,healthy,0,false,0,805306368,283545600,358092800,266567680,3440640,0,0,0,yes
|
||||
152.3,idle,running,healthy,0,false,0,805306368,284090368,358092800,266629120,3440640,0,0,0,yes
|
||||
154.3,idle,running,healthy,0,false,0,805306368,283865088,358092800,266629120,3440640,0,0,0,yes
|
||||
156.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
158.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
160.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
162.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
164.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
166.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
168.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
170.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
172.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
174.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
176.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
178.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
180.3,idle,running,healthy,0,false,0,805306368,283615232,358092800,266629120,3440640,0,0,0,yes
|
||||
182.3,idle,running,healthy,0,false,0,805306368,283774976,358092800,266637312,3440640,0,0,0,yes
|
||||
184.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
186.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
188.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
190.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
192.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
194.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
196.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
198.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
200.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
202.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
204.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
206.3,idle,running,healthy,0,false,0,805306368,283623424,358092800,266637312,3440640,0,0,0,yes
|
||||
208.3,idle,running,healthy,0,false,0,805306368,283619328,358092800,266637312,3440640,0,0,0,yes
|
||||
210.3,idle,running,healthy,0,false,0,805306368,283619328,358092800,266637312,3440640,0,0,0,yes
|
||||
212.3,idle,running,healthy,0,false,0,805306368,282644480,358092800,265555968,3440640,0,0,0,yes
|
||||
214.3,idle,running,healthy,0,false,0,805306368,282529792,358092800,265555968,3440640,0,0,0,yes
|
||||
216.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
218.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
220.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
222.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
224.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
226.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
228.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
230.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
232.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
234.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
236.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
238.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
240.3,idle,running,healthy,0,false,0,805306368,281309184,358092800,264429568,3440640,0,0,0,yes
|
||||
242.3,idle,running,healthy,0,false,0,805306368,279969792,358092800,262512640,3440640,0,0,0,yes
|
||||
244.3,idle,running,healthy,0,false,0,805306368,279519232,358092800,262512640,3440640,0,0,0,yes
|
||||
246.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes
|
||||
248.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes
|
||||
250.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes
|
||||
252.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes
|
||||
254.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes
|
||||
256.3,idle,running,healthy,0,false,0,805306368,279330816,358092800,262512640,3440640,0,0,0,yes
|
||||
258.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
260.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
262.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
264.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
266.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
268.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
270.3,idle,running,healthy,0,false,0,805306368,279326720,358092800,262512640,3440640,0,0,0,yes
|
||||
272.3,idle,running,healthy,0,false,0,805306368,279535616,358092800,262713344,3440640,0,0,0,yes
|
||||
274.3,idle,running,healthy,0,false,0,805306368,279535616,358092800,262713344,3440640,0,0,0,yes
|
||||
276.3,idle,running,healthy,0,false,0,805306368,279531520,358092800,262713344,3440640,0,0,0,yes
|
||||
278.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
280.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
282.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
284.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
286.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
288.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
290.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
292.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
294.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
296.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
298.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
300.3,idle,running,healthy,0,false,0,805306368,279527424,358092800,262713344,3440640,0,0,0,yes
|
||||
302.3,idle,running,healthy,0,false,0,805306368,280551424,358092800,262909952,3440640,0,0,0,yes
|
||||
304.3,idle,running,healthy,0,false,0,805306368,279789568,358092800,262909952,3440640,0,0,0,yes
|
||||
306.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
308.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
310.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
312.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
314.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
316.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
318.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
320.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
322.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
324.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
326.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
328.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
330.3,idle,running,healthy,0,false,0,805306368,279732224,358092800,262909952,3440640,0,0,0,yes
|
||||
332.3,end,running,healthy,0,false,0,805306368,280178688,358092800,263094272,3440640,0,0,0,yes
|
||||
334.3,end,running,healthy,0,false,0,805306368,280158208,358092800,263094272,3440640,0,0,0,yes
|
||||
|
+41
@@ -0,0 +1,41 @@
|
||||
Error response from daemon: No such container: r803papra-papra-1
|
||||
{"level":"info","message":"Worker started","timestampMs":1790952202404,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}}
|
||||
{"level":"info","message":"Task worker started","timestampMs":1790952202405,"namespace":"tasks:services","data":{"processMode":"all","workerId":"default"}}
|
||||
{"level":"info","message":"Worker started","timestampMs":1790952202405,"namespace":"app-server","data":{"processMode":"all"}}
|
||||
{"level":"info","message":"Server started","timestampMs":1790952202412,"namespace":"app-server","data":{"processMode":"all","port":1221}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790952202412,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents"}}
|
||||
{"level":"info","message":"Expired documents deleted","timestampMs":1790952202417,"namespace":"documents:tasks:hardDeleteExpiredDocuments","data":{"processMode":"all","deletedDocumentsCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790952202418,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-hard-delete-expired-documents","taskName":"hard-delete-expired-documents","nextDate":"2026-10-02T22:00:00.000Z"}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790952202418,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations"}}
|
||||
{"level":"info","message":"Updated expired pending invitations status","timestampMs":1790952202420,"namespace":"organizations:tasks:expireInvitations","data":{"processMode":"all"}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790952202420,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations","nextDate":"2026-10-02T22:00:00.000Z"}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790952202420,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations"}}
|
||||
{"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790952202421,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organizationCount":0}}
|
||||
{"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790952202421,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganizationCount":0,"totalOrganizationCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790952202422,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired-organizations","nextDate":"2026-10-02T23:00:00.000Z"}}
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790952202422,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries"}}
|
||||
{"level":"info","message":"Purged expired kv-store entries","timestampMs":1790952202423,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790952202424,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv-entries","nextDate":"2026-10-03T00:00:00.000Z"}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952224957,"namespace":"app","data":{"processMode":"all","requestId":"req_mzlriaig290cp0lo1pueqg8f","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":10}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952225211,"namespace":"app","data":{"processMode":"all","requestId":"req_rbgds36k06nva5ctmyja6wa8","status":200,"method":"GET","path":"/api/health","routePath":"/api/health","userAgent":"curl/8.14.1","durationMs":10}}
|
||||
{"level":"warn","message":"Rate limiting skipped: could not determine client IP address. Ensure your runtime forwards a trusted client IP header and configure `advanced.ipAddress.ipAddressHeaders` if needed.","timestampMs":1790952225255,"namespace":"auth","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","args":[]}}
|
||||
{"level":"info","message":"User signed up","timestampMs":1790952225439,"namespace":"auth","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","userId":"usr_ruxg5v735iel8nz8s9lqa7tq"}}
|
||||
{"level":"debug","message":"Event emitted","timestampMs":1790952225441,"namespace":"events-services","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventName":"user.created","eventId":"evt_ow003efa2kswbeylubj7rz7e","handlerCount":2,"handlerNames":["roles.assign-admin-to-first-user","tracking.register-user-created-event"]}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952225443,"namespace":"app","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","status":200,"method":"POST","path":"/api/auth/sign-up/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":193}}
|
||||
{"level":"info","message":"Event handler executed successfully","timestampMs":1790952225446,"namespace":"events-services","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventId":"evt_ow003efa2kswbeylubj7rz7e","eventName":"user.created","handlerName":"tracking.register-user-created-event"}}
|
||||
{"level":"info","message":"Admin role assigned to first user","timestampMs":1790952225457,"namespace":"events:first-user-admin","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventId":"evt_ow003efa2kswbeylubj7rz7e","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user","userId":"usr_ruxg5v735iel8nz8s9lqa7tq"}}
|
||||
{"level":"info","message":"Event handler executed successfully","timestampMs":1790952225457,"namespace":"events-services","data":{"processMode":"all","requestId":"req_ds7k408u2428ruedcr4wkuyz","eventId":"evt_ow003efa2kswbeylubj7rz7e","eventName":"user.created","handlerName":"roles.assign-admin-to-first-user"}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952225483,"namespace":"app","data":{"processMode":"all","requestId":"req_vq3wue4ynu6w2hgdioirevpy","status":200,"method":"GET","path":"/","routePath":"/*","userAgent":"curl/8.14.1","durationMs":2}}
|
||||
{"level":"error","message":"Invalid password","timestampMs":1790952225645,"namespace":"auth","data":{"processMode":"all","requestId":"req_j26sizfqgcjoyehnqbqwshp7","args":[]}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952225649,"namespace":"app","data":{"processMode":"all","requestId":"req_j26sizfqgcjoyehnqbqwshp7","status":401,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":131}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952225813,"namespace":"app","data":{"processMode":"all","requestId":"req_fiszwx3skbrokcjkwy25qqqt","status":200,"method":"POST","path":"/api/auth/sign-in/email","routePath":"/api/auth/*","userAgent":"curl/8.14.1","durationMs":129}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952255066,"namespace":"app","data":{"processMode":"all","requestId":"req_jtvkoj6bu97qyx0vn4xlueur","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952285177,"namespace":"app","data":{"processMode":"all","requestId":"req_lc748l5n8pffmamuf2h1v2i2","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952315288,"namespace":"app","data":{"processMode":"all","requestId":"req_mhiebf8u6rkw5y714kvimxe0","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952345400,"namespace":"app","data":{"processMode":"all","requestId":"req_n8xfrzfsje6fjmdotkp7jsi6","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952375509,"namespace":"app","data":{"processMode":"all","requestId":"req_z7vnjzysymre102masesv1g7","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952405625,"namespace":"app","data":{"processMode":"all","requestId":"req_sm6dnbj50dom70gj14gtzh9l","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952435760,"namespace":"app","data":{"processMode":"all","requestId":"req_ijng1wv39gjmmt5bfy8aamjj","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":2}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952465867,"namespace":"app","data":{"processMode":"all","requestId":"req_uvkcg2pvsxcfqijm6o3s5666","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952495986,"namespace":"app","data":{"processMode":"all","requestId":"req_mu9yi26i6txf2ebnqgbtr3yj","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
{"level":"info","message":"Request completed","timestampMs":1790952526097,"namespace":"app","data":{"processMode":"all","requestId":"req_xrw5zt9is0bg76uv8jhjxgr0","status":200,"method":"GET","path":"/","routePath":"/*","durationMs":1}}
|
||||
@@ -0,0 +1,39 @@
|
||||
[ 0.3s] compose create rc=0 container=334b86886d75 HostConfig.Memory=805306368
|
||||
[ 0.6s] compose start rc=0
|
||||
[ 31.0s] healthy at 31.0s
|
||||
[ 31.2s] fixture seed -> OK (papra: sign-up http=200)
|
||||
[ 31.6s] fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True)
|
||||
[ 31.6s] idle 300s
|
||||
[ 334.6s] volume files: ['db/db.sqlite (581632 B)']
|
||||
{
|
||||
"app": "papra",
|
||||
"idle_s": 300,
|
||||
"fixture_said": [
|
||||
"papra: sign-up http=200",
|
||||
"papra: sign-in as the seeded account http=200 ok=True"
|
||||
],
|
||||
"seed_ok": true,
|
||||
"readback": true,
|
||||
"healthy_at_s": 31.0,
|
||||
"volume_files": [
|
||||
"db/db.sqlite (581632 B)"
|
||||
],
|
||||
"samples": 168,
|
||||
"peak_anon_bytes": 297943040,
|
||||
"peak_anon_by_phase": {
|
||||
"start": 295247872,
|
||||
"seed": null,
|
||||
"readback": null,
|
||||
"idle": 297943040,
|
||||
"end": 263094272
|
||||
},
|
||||
"idle_end_anon_bytes": 263094272,
|
||||
"peak_current_bytes": 316313600,
|
||||
"cgroup_memory_peak_bytes_max": 358092800,
|
||||
"oom_kill_max": 0,
|
||||
"final_status": "running",
|
||||
"final_health": "healthy",
|
||||
"final_restarts": "0",
|
||||
"final_oomkilled_flag": "false",
|
||||
"limit_bytes": 805306368
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"app": "papra",
|
||||
"env_keys": [
|
||||
"AUTH_SECRET",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"idle_s": 300,
|
||||
"fixture_said": [
|
||||
"papra: sign-up http=200",
|
||||
"papra: sign-in as the seeded account http=200 ok=True"
|
||||
],
|
||||
"seed_ok": true,
|
||||
"readback": true,
|
||||
"healthy_at_s": 31.0,
|
||||
"volume_files": [
|
||||
"db/db.sqlite (581632 B)"
|
||||
],
|
||||
"samples": 168,
|
||||
"peak_anon_bytes": 297943040,
|
||||
"peak_anon_by_phase": {
|
||||
"start": 295247872,
|
||||
"seed": null,
|
||||
"readback": null,
|
||||
"idle": 297943040,
|
||||
"end": 263094272
|
||||
},
|
||||
"idle_end_anon_bytes": 263094272,
|
||||
"peak_current_bytes": 316313600,
|
||||
"cgroup_memory_peak_bytes_max": 358092800,
|
||||
"oom_kill_max": 0,
|
||||
"final_status": "running",
|
||||
"final_health": "healthy",
|
||||
"final_restarts": "0",
|
||||
"final_oomkilled_flag": "false",
|
||||
"limit_bytes": 805306368,
|
||||
"events": [
|
||||
{
|
||||
"t": 0.3,
|
||||
"event": "compose create rc=0 container=334b86886d75 HostConfig.Memory=805306368"
|
||||
},
|
||||
{
|
||||
"t": 0.6,
|
||||
"event": "compose start rc=0"
|
||||
},
|
||||
{
|
||||
"t": 31.0,
|
||||
"event": "healthy at 31.0s"
|
||||
},
|
||||
{
|
||||
"t": 31.2,
|
||||
"event": "fixture seed -> OK (papra: sign-up http=200)"
|
||||
},
|
||||
{
|
||||
"t": 31.6,
|
||||
"event": "fixture read back -> True (papra: sign-in as the seeded account http=200 ok=True)"
|
||||
},
|
||||
{
|
||||
"t": 31.6,
|
||||
"event": "idle 300s"
|
||||
},
|
||||
{
|
||||
"t": 334.6,
|
||||
"event": "volume files: ['db/db.sqlite (581632 B)']"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
+ date -u
|
||||
Fri Oct 2 14:51:49 UTC 2026
|
||||
+ pct list
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
9401 running r803-papra
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19545060 18821200 48.32%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 80190580 853162508 8.15%
|
||||
+ pct exec 9401 -- bash -c 'docker ps -a --format {{.Names}} | wc -l; docker volume ls -q | wc -l; ls /root/.docker/config.json 2>&1'
|
||||
0
|
||||
0
|
||||
ls: cannot access '/root/.docker/config.json': No such file or directory
|
||||
+ pct stop 9401
|
||||
+ pct destroy 9401 --purge
|
||||
purging CT 9401 from related configurations..
|
||||
+ pct list
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
+ pct config 9401
|
||||
+ head -1
|
||||
Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist
|
||||
+ ls /mnt/hdd_1/images/
|
||||
9202
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19544988 18821272 48.31%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 77370636 855982452 7.87%
|
||||
ls: cannot access '/root/r803-*': No such file or directory
|
||||
|
||||
# Teardown statement (R-803), 2026-10-02 ~14:52Z
|
||||
# machine: bench LXC 9401 (r803-papra): 0 containers and 0 volumes before stop (each run did `compose down -v`); no Docker Hub
|
||||
# login was made this time (no config.json); destroyed with --purge.
|
||||
# host: demo-hp: `pct list` = 9201 + 9202 only (both untouched); /mnt/hdd_1/images/ = 9202 only; nvme-scratch 77370636 KiB
|
||||
# used before create = after destroy; local-lvm unchanged (34954734 KiB); helper scripts removed from /root.
|
||||
# hub: untouched. No prune anywhere. Nothing committed or pushed; the 768M change existed only in the bench's catalog copy
|
||||
# (recorded in template.diff). The DooPlex scratchpad catalog-wt was not modified.
|
||||
@@ -0,0 +1,35 @@
|
||||
diff --git a/templates/papra/.felhom.yml b/templates/papra/.felhom.yml
|
||||
index 15c568e..9c68192 100644
|
||||
--- a/templates/papra/.felhom.yml
|
||||
+++ b/templates/papra/.felhom.yml
|
||||
@@ -15,7 +15,7 @@ catalog_since: "2026-09-22"
|
||||
# --- Resource hints (displayed on deploy screen) ---
|
||||
resources:
|
||||
mem_request: "50M"
|
||||
- mem_limit: "256M"
|
||||
+ mem_limit: "768M"
|
||||
pi_compatible: true
|
||||
needs_hdd: false
|
||||
|
||||
diff --git a/templates/papra/docker-compose.yml b/templates/papra/docker-compose.yml
|
||||
index 44bd7c6..d79cacd 100644
|
||||
--- a/templates/papra/docker-compose.yml
|
||||
+++ b/templates/papra/docker-compose.yml
|
||||
@@ -1,7 +1,7 @@
|
||||
# Papra - Minimalista dokumentumtár és rendszerező
|
||||
# Domain: ${SUBDOMAIN}.${DOMAIN}
|
||||
# Database: None (file-based)
|
||||
-# RAM: ~50M (mem_limit: 256M) | Pi-compatible: Yes
|
||||
+# RAM: ~255M idle, ~405M anon at first-start migration (mem_limit: 768M, R-803) | Pi-compatible: Yes
|
||||
#
|
||||
# Environment variables:
|
||||
# DOMAIN - Your domain (e.g., demo-felhom.eu)
|
||||
@@ -38,7 +38,7 @@ services:
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
- memory: 256M
|
||||
+ memory: 768M
|
||||
healthcheck:
|
||||
# A papra képfájlban nincs wget és nincs curl — csak node. A korábbi wget
|
||||
# próba ezért soha nem futott le, a konténer véglegesen unhealthy maradt,
|
||||
@@ -0,0 +1,211 @@
|
||||
# Volume-persistence sweep — all 58 templates, 2026-10-02 (bench LXC 9401 on demo-hp)
|
||||
|
||||
Gate: `scripts/check-volume-persistence.py --all --evidence` (catalog-wt febf58c + UNCOMMITTED R-801/R-788/fixture-seed
|
||||
change), 8 batches, Docker Hub logged in. Raw stdout: `batch-NN.txt`; per-app probe: `evidence/<app>/probe.json`.
|
||||
|
||||
## Headline
|
||||
|
||||
**CLEAN** 39 · **UNDETERMINED** 19 · **BROKEN** 0 · **INCONCLUSIVE** 0
|
||||
(of 58). BROKEN = the gate REFUSED. Apps where the gate called the app's own fixture seed: **16**.
|
||||
|
||||
"What made it write" is read off the probe: `fixture …` = the gate's third step ran (field `fixture`); `deep pass` = the
|
||||
second (wider, redirect-following) GET pass produced answers (inferred: >1 hit per ip:port or a non-`/` path); `GET exercise
|
||||
(or start)` = the first `/` GET answered and nothing further was needed — the probe cannot separate data written at start from
|
||||
data written because of that GET. A `fixture` field of null on an UNDETERMINED app means the app has no fixture (or the module
|
||||
did not load), so the gate had nothing to call.
|
||||
|
||||
## Reading the headline (added by hand after the generator)
|
||||
|
||||
- **Fixture seed: called for 16 apps.** It turned 2 into CLEAN (metube, privatebin). 13 seeded OK and still stay
|
||||
UNDETERMINED, because a *second* declared volume (uploads / media / cache / redis / backup) stays empty after a
|
||||
seed that writes only to the database: claper, crafty-controller, dawarich, docmost, gramps-web, immich, outline,
|
||||
sparkyfitness, tandoor, vikunja, wger, wishlist, zipline. 1 seed could not run: plex (`NoRoute` — the first-run claim
|
||||
needs a plex.tv token). No fixture crashed the gate.
|
||||
- **5 UNDETERMINED apps had no fixture to call:** bentopdf (stateless, declares no volume), papra (crash-loop, see
|
||||
below), plant-it (image gone), recipe-importer (writes nothing; the only `/` entry is its own `/data` mount point),
|
||||
wanderer (web container **unhealthy**; its pocketbase and meilisearch volumes hold data, `/app/uploads` and
|
||||
`/data/plugins` are empty).
|
||||
- **papra does not start under its own memory limit.** Exit 137 in batch 06 and again alone
|
||||
(`batch-09-papra-rerun.txt`). Separate diagnosis (`papra-oom-diagnosis.txt`): `docker run --memory 256m` (the
|
||||
template's `deploy.resources.limits.memory`) → `OOMKilled=true` during `tsx src/scripts/migrate-up.script.ts`; no
|
||||
limit → running at ~416 MiB after 60 s, `db/db.sqlite` written INTO the `/app/app-data` volume. So the R-156 mount
|
||||
is right; the 256M limit (header comment says "RAM ~50M") is too low for papra 26.6.2. Not a persistence verdict —
|
||||
a start-up defect. Template not edited.
|
||||
- **plant-it** (`lifecycle: abandoned`, run only because of `--all`): `msdeluise/plant-it` cannot be pulled
|
||||
("repository does not exist"), while logged in to Docker Hub. Not throttling, so not INCONCLUSIVE.
|
||||
- **No pull was throttled** — no `toomanyrequests` / rate-limit text in any batch, so INCONCLUSIVE is 0.
|
||||
- **Blind spot, not a verdict:** grimmory is CLEAN while its `/app/data` (a BIND to the data drive) holds 0 files;
|
||||
the R-788 empty-volume rule covers only *named declared* volumes, and grimmory's state is in its MariaDB volume
|
||||
(355 files). Same shape: komga `/data`, paperless `consume`/`export`, radarr/sonarr media binds — empty binds are
|
||||
not judged by the gate.
|
||||
- **No GET answer** on crafty-controller (port 8443 is HTTPS; the gate curls `http://`) and gramps-web (port 5000)
|
||||
— both reached data only through the fixture.
|
||||
- `--all` was used so the hidden (wger) and abandoned (plant-it) apps are in scope; 56 are `available`.
|
||||
|
||||
| app | verdict now | ports | what made it write | gate's reasons (short) | notes |
|
||||
|---|---|---|---|---|---|
|
||||
| actualbudget | CLEAN | 5006 | GET exercise (or start) | - | declared volumes: actualbudget_data · mounts actualbudget:/data=2(named-declared) |
|
||||
| adventurelog | CLEAN | 80,3000 | GET exercise (or start) | - | declared volumes: adventurelog_media, adventurelog_postgres_data · mounts adventurelog:/code/media=251(named-declared); adventurelog-postgres:/var/lib/postgresql/data=2313(named-declared) |
|
||||
| audiobookshelf | CLEAN | 80 | GET exercise (or start) | - | declared volumes: audiobookshelf_config, audiobookshelf_metadata · mounts audiobookshelf:/audiobooks=0(bind); audiobookshelf:/podcasts=0(bind); audiobookshelf:/config=16(named-declared); audiobookshelf:/metadata=1(named-declared) |
|
||||
| bentopdf | UNDETERMINED | 8080 | deep pass | nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN | declared volumes: NONE · fixture: none called (app has no fixture, or step not reached) · mounts |
|
||||
| bookstack | CLEAN | 80 | GET exercise (or start) | - | declared volumes: bookstack_config, bookstack_db_data · mounts bookstack:/config=22(named-declared); bookstack-db:/var/lib/mysql=291(named-declared) |
|
||||
| calcom | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: calcom_postgres_data · mounts calcom-postgres:/var/lib/postgresql=2264(named-declared) |
|
||||
| calibre-web | CLEAN | 8083 | GET exercise (or start) | calibre-web: /app/calibre-web-automated/empty_library — database file(s) touched but byte-identical to the image; a chown sweep, not a write; calibre-web: /app/calibre-web-automated/empty_library — database file(s) touch | declared volumes: calibre_web_config · mounts calibre-web:/cwa-book-ingest=0(bind); calibre-web:/calibre-library=3(bind); calibre-web:/config=11(named-declared) |
|
||||
| claper | UNDETERMINED | 4000 | fixture seed OK — `fixture Claper: seed OK — claper: seeded user drill-f9ed4c26@gate.invalid` | claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; claper: this container's mounts are all empty while it created entries in ['/ | declared volumes: claper_postgres_data, claper_uploads · mounts claper:/app/priv/static/uploads=0(named-declared); claper-postgres:/var/lib/postgresql/data=1471(named-declared) |
|
||||
| code-server | CLEAN | 8443 | GET exercise (or start) | - | declared volumes: codeserver_config · mounts code-server:/config=12(named-declared) |
|
||||
| crafty-controller | UNDETERMINED | 8443 | fixture seed OK — `fixture Crafty: seed OK — crafty: POST /api/v2/roles http=200 {"status":"ok","data":{"role_id":1}}` | crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it; crafty-controller: declared volume /crafty/import is EMPTY after the exerci | declared volumes: crafty_backups, crafty_config, crafty_import, crafty_logs, crafty_servers · mounts crafty-controller:/crafty/logs=8(named-declared); crafty-controller:/crafty/servers=0(named-declared); crafty-controller:/crafty/app/config=16(named-declared); crafty-controller:/crafty/import=0(named-declared); crafty-controller:/crafty/backups=0(named-declared) |
|
||||
| dawarich | UNDETERMINED | 3000 | fixture seed OK — `fixture Dawarich: seed OK — dawarich: POST /api/v1/overland/batches http=201 (47.4056,19.1918 at 2026-09-10T13:50:00Z)` | dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: dawarich_db_data, dawarich_public, dawarich_redis, dawarich_storage, dawarich_watched · mounts dawarich:/var/app/tmp/imports/watched=0(named-declared); dawarich:/var/app/storage=1(named-declared); dawarich:/var/app/public=646(named-declared); dawarich-db:/var/lib/postgresql/data=2358(named-declared); dawarich-redis:/data=0(named-declared); dawarich-sidekiq:/var/app/public=646(named-declared); |
|
||||
| docmost | UNDETERMINED | 3000 | fixture seed OK — `fixture Docmost: seed OK — docmost: /api/auth/setup http=200 rc=0` | docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where the template preserves it; docmost: this container's mounts are all empty while it created entries in ['/app/a | declared volumes: docmost_postgres_data, docmost_redis_data, docmost_storage · mounts docmost:/app/data/storage=0(named-declared); docmost-postgres:/var/lib/postgresql=1589(named-declared); docmost-redis:/data=3(named-declared) |
|
||||
| emby | CLEAN | 8096 | GET exercise (or start) | - | declared volumes: emby_config · mounts emby:/media=3(bind); emby:/config=46(named-declared) |
|
||||
| ghost | CLEAN | 2368 | GET exercise (or start) | - | declared volumes: ghost_content · mounts ghost:/var/lib/ghost/content=7(named-declared) |
|
||||
| gitea | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: gitea_data · mounts gitea:/data=8(named-declared) |
|
||||
| glance | CLEAN | 8080 | GET exercise (or start) | - | declared volumes: glance_config · mounts glance:/app/config=1(named-declared) |
|
||||
| gokapi | CLEAN | 53842 | GET exercise (or start) | - | declared volumes: gokapi_config, gokapi_data · mounts gokapi:/app/data=4(named-declared); gokapi:/app/config=1(named-declared) |
|
||||
| grafana | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: grafana_data · mounts grafana:/var/lib/grafana=939(named-declared) |
|
||||
| gramps-web | UNDETERMINED | 5000 | fixture seed OK — `fixture GrampsWeb: seed OK — gramps-web: seeded user drill1c00babf` | gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the template preserves it; gramps-web: declared volume /app/indexdir is EMPTY after the exercise — the app was no | declared volumes: gramps_cache, gramps_db, gramps_index, gramps_media, gramps_secret, gramps_thumb_cache, gramps_tmp, gramps_users · mounts gramps-web:/app/cache=1(named-declared); gramps-web:/app/secret=0(named-declared); gramps-web:/tmp=0(named-declared); gramps-web:/app/users=1(named-declared); gramps-web:/root/.gramps/grampsdb=2(named-declared); gramps-web:/app/indexdir=0(named-declared); gramps-web:/app/media=0(named-declared); gra |
|
||||
| grimmory | CLEAN | 6060 | GET exercise (or start) | grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] — benign when a sibling container holds the state, worth a look when none does | declared volumes: grimmory_db · mounts grimmory:/app/data=0(bind); grimmory:/books=0(bind); grimmory:/bookdrop=0(bind); grimmory-db:/var/lib/mysql=355(named-declared) |
|
||||
| home-assistant | CLEAN | 8123 | GET exercise (or start) | - | declared volumes: homeassistant_config · mounts home-assistant:/config=22(named-declared) |
|
||||
| homebox | CLEAN | 7745 | GET exercise (or start) | - | declared volumes: homebox_data · mounts homebox:/data=3(named-declared) |
|
||||
| homepage | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: homepage_config · mounts homepage:/var/run/docker.sock=-1(bind); homepage:/app/config=3(named-declared) |
|
||||
| immich | UNDETERMINED | 2283 | fixture seed OK — `fixture Immich: seed OK — immich: seeded album drillalbuma6820f47` | immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it; immich-machine-learning: this container's mounts are all empty while it create | declared volumes: immich_ml_cache, immich_postgres_data, immich_redis_data · mounts immich-machine-learning:/cache=0(named-declared); immich-postgres:/var/lib/postgresql/data=1879(named-declared); immich-redis:/data=3(named-declared); immich-server:/usr/src/app/upload=6(bind); immich-server:/external/photos=0(bind); immich-server:/data=0(anonymous) |
|
||||
| jellyfin | CLEAN | 8096 | GET exercise (or start) | - | declared volumes: jellyfin_cache, jellyfin_config · mounts jellyfin:/media=3(bind); jellyfin:/config=20(named-declared); jellyfin:/cache=2(named-declared) |
|
||||
| karakeep | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: karakeep_data, karakeep_meili · mounts karakeep:/data=2(named-declared); karakeep-meilisearch:/meili_data=5(named-declared) |
|
||||
| kimai | CLEAN | 8001 | GET exercise (or start) | - | declared volumes: kimai_db_data, kimai_var · mounts kimai:/opt/kimai/var=2038(named-declared); kimai-db:/var/lib/mysql=279(named-declared) |
|
||||
| komga | CLEAN | 25600 | GET exercise (or start) | - | declared volumes: komga_config · mounts komga:/data=0(bind); komga:/config=11(named-declared) |
|
||||
| mealie | CLEAN | 9000 | GET exercise (or start) | - | declared volumes: mealie_data · mounts mealie:/app/data=5(named-declared) |
|
||||
| metube | CLEAN | 8081 | fixture seed OK — `fixture MeTube: seed OK — metube: the download finished (991017 bytes)` | - | declared volumes: metube_state · mounts metube:/downloads=1(bind); metube:/state=2(named-declared) |
|
||||
| n8n | CLEAN | 5678 | GET exercise (or start) | - | declared volumes: n8n_data · mounts n8n:/home/node/.n8n=7(named-declared) |
|
||||
| navidrome | CLEAN | 4533 | GET exercise (or start) | - | declared volumes: navidrome_data · mounts navidrome:/music=0(bind); navidrome:/data=6(named-declared) |
|
||||
| nextcloud | CLEAN | 80 | GET exercise (or start) | - | declared volumes: nextcloud_db_data, nextcloud_html, nextcloud_redis_data · mounts nextcloud:/var/www/html=4001(named-declared); nextcloud:/var/www/html/data=69(bind); nextcloud-db:/var/lib/mysql=471(named-declared); nextcloud-redis:/data=3(named-declared) |
|
||||
| onlyoffice | CLEAN | 80 | GET exercise (or start) | onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store (path suggests state, no database signature — judgement needed): ['icons', 'scr | declared volumes: onlyoffice_data, onlyoffice_logs · mounts onlyoffice:/var/log/onlyoffice=11(named-declared); onlyoffice:/usr/share/fonts/truetype/custom=0(anonymous); onlyoffice:/var/lib/onlyoffice=0(anonymous); onlyoffice:/var/www/onlyoffice/Data=3(named-declared) |
|
||||
| opengist | CLEAN | 6157 | GET exercise (or start) | - | declared volumes: opengist_data · mounts opengist:/opengist=9(named-declared) |
|
||||
| outline | UNDETERMINED | 3000 | fixture seed OK — `fixture Outline: seed OK — outline: seeded document drilldoc-ed522bc2` | outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write where the template preserves it; outline-redis: declared volume /data is EMPTY after the exercise — the app was | declared volumes: outline_data, outline_postgres_data, outline_redis_data · mounts outline:/var/lib/outline/data=0(named-declared); outline-postgres:/var/lib/postgresql=1669(named-declared); outline-redis:/data=0(named-declared) |
|
||||
| paperless-ngx | CLEAN | 8000 | GET exercise (or start) | - | declared volumes: paperless_data, paperless_postgres_data, paperless_redis_data · mounts paperless-postgres:/var/lib/postgresql=1931(named-declared); paperless-redis:/data=3(named-declared); paperless-webserver:/usr/src/paperless/media=1(bind); paperless-webserver:/usr/src/paperless/consume=0(bind); paperless-webserver:/usr/src/paperless/export=0(bind); paperless-webserver:/usr/src/pape |
|
||||
| papra | UNDETERMINED | 1221 | nothing answered HTTP | papra: not running (status=restarting exit=137 restarts=None) | not running: papra=restarting · declared volumes: papra_data · fixture: none called (app has no fixture, or step not reached) · mounts papra:/app/app-data=0(named-declared) |
|
||||
| plant-it | UNDETERMINED | none | start only (no routed port, no HTTP exercise) | no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
|
||||
Error response from daemon: pull access denied for msdelui | probe error: no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denie · declared volumes: NONE · fixture: none called (app has no fixture, or step not reached) · mounts |
|
||||
| plex | UNDETERMINED | 32400 | fixture seed FAILED — `fixture NoRoute: seed returned nothing (tried: the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists` | plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: plex_config, plex_transcode · mounts plex:/media=4(bind); plex:/transcode=0(named-declared); plex:/config=82(named-declared) |
|
||||
| privatebin | CLEAN | 8080 | fixture seed OK — `fixture PrivateBin: seed OK — privatebin: seeded paste id=260cce3d99910079` | - | declared volumes: privatebin_data · mounts privatebin:/srv/data=5(named-declared); privatebin:/run=14(anonymous); privatebin:/tmp=0(anonymous); privatebin:/var/lib/nginx/tmp=0(anonymous) |
|
||||
| radarr | CLEAN | 7878 | GET exercise (or start) | radarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['movies'] | declared volumes: radarr_config · mounts radarr:/media/movies=0(bind); radarr:/downloads=0(bind); radarr:/config=9(named-declared) |
|
||||
| radicale | CLEAN | 5232 | GET exercise (or start) | - | declared volumes: radicale_data · mounts radicale:/var/lib/radicale=1(named-declared) |
|
||||
| rallly | CLEAN | 3000 | GET exercise (or start) | - | declared volumes: rallly_postgres_data · mounts rallly-postgres:/var/lib/postgresql=1607(named-declared) |
|
||||
| recipe-importer | UNDETERMINED | 8000 | deep pass | NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.; recipe-importer: declared volume /data is EMPTY | declared volumes: recipe_data · fixture: none called (app has no fixture, or step not reached) · mounts recipe-importer:/data=0(named-declared) |
|
||||
| romm | CLEAN | 8080 | GET exercise (or start) | - | declared volumes: romm_config, romm_db_data, romm_redis_data · mounts romm:/romm/config=1(named-declared); romm:/redis-data=0(anonymous); romm:/romm=0(anonymous); romm:/romm/library=0(bind); romm:/romm/resources=0(bind); romm-db:/var/lib/mysql=302(named-declared); romm-redis:/data=4(named-declared) |
|
||||
| seerr | CLEAN | 5055 | GET exercise (or start) | - | declared volumes: seerr_config · mounts seerr:/app/config=11(named-declared) |
|
||||
| sonarr | CLEAN | 8989 | GET exercise (or start) | sonarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['tv'] | declared volumes: sonarr_config · mounts sonarr:/media/tv=0(bind); sonarr:/downloads=0(bind); sonarr:/config=11(named-declared) |
|
||||
| sparkyfitness | UNDETERMINED | 80 | fixture seed OK — `fixture Sparkyfitness: seed OK — sparkyfitness: seeded user drill4cb3a4 with a weight of 64.59 on 2026-09-01` | sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template preserves it; sparkyfitness-server: declared volume /app/SparkyFitness | declared volumes: sparkyfitness_backup, sparkyfitness_db_data, sparkyfitness_uploads · mounts sparkyfitness-db:/var/lib/postgresql=1822(named-declared); sparkyfitness-server:/app/SparkyFitnessServer/backup=0(named-declared); sparkyfitness-server:/app/SparkyFitnessServer/uploads=0(named-declared) |
|
||||
| tandoor | UNDETERMINED | 80 | fixture seed OK — `fixture Django: seed OK — tandoor: seeded superuser drill425a04` | tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: tandoor_media, tandoor_postgres_data, tandoor_static · mounts tandoor:/opt/recipes/staticfiles=3359(named-declared); tandoor:/opt/recipes/mediafiles=0(named-declared); tandoor-postgres:/var/lib/postgresql/data=2003(named-declared) |
|
||||
| termix | CLEAN | 8080 | GET exercise (or start) | - | declared volumes: termix_data · mounts termix:/app/data=5(named-declared) |
|
||||
| uptime-kuma | CLEAN | 3001 | GET exercise (or start) | - | declared volumes: uptime_kuma_data · mounts uptime-kuma:/app/data=4(named-declared) |
|
||||
| vaultwarden | CLEAN | 80 | GET exercise (or start) | - | declared volumes: vaultwarden_data · mounts vaultwarden:/data=4(named-declared) |
|
||||
| vikunja | UNDETERMINED | 3456 | fixture seed OK — `fixture Vikunja: seed OK — vikunja: create project http=201` | vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: vikunja_data, vikunja_db · mounts vikunja:/db=3(named-declared); vikunja:/app/vikunja/files=0(named-declared) |
|
||||
| wanderer | UNDETERMINED | 3000,8090 | GET exercise (or start) | wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; wanderer-db: declared volume /data/plugins is EMPTY after the exer | declared volumes: wanderer_data, wanderer_meili_data, wanderer_plugins, wanderer_uploads · fixture: none called (app has no fixture, or step not reached) · mounts wanderer:/app/uploads=0(named-declared); wanderer-db:/data/plugins=0(named-declared); wanderer-db:/pb_data=6(named-declared); wanderer-search:/meili_data=11(named-declared) |
|
||||
| wger | UNDETERMINED | 8000 | fixture seed OK — `fixture Wger: seed OK — wger: POST /api/v2/weightentry/ http=201` | wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: wger_data, wger_media · mounts wger:/home/wger/db=2(named-declared); wger:/home/wger/media=0(named-declared) |
|
||||
| wishlist | UNDETERMINED | 3000 | fixture seed OK — `fixture Wishlist: seed OK — wishlist: /signup http=200 type=success` | wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it | declared volumes: wishlist_data, wishlist_uploads · mounts wishlist:/usr/src/app/uploads=0(named-declared); wishlist:/usr/src/app/data=3(named-declared) |
|
||||
| zipline | UNDETERMINED | 3000 | fixture seed OK — `fixture Zipline: seed OK — zipline: /api/setup http=200 :: {"firstSetup":false,"user":{"id":"ay6n2g4wkn7i2kkg6dvag03n","username":"drill` | zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; zipline: declared volume /zipline/public is EMPTY after the exercise — the app was n | declared volumes: zipline_postgres_data, zipline_public, zipline_uploads · mounts zipline:/zipline/uploads=0(named-declared); zipline:/zipline/public=0(named-declared); zipline-postgres:/var/lib/postgresql/data=1435(named-declared) |
|
||||
|
||||
## BROKEN — reasons verbatim (0)
|
||||
|
||||
none
|
||||
|
||||
## UNDETERMINED — reasons verbatim (19)
|
||||
|
||||
### bentopdf (batch-01.txt)
|
||||
```
|
||||
nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN
|
||||
```
|
||||
### claper (batch-02.txt)
|
||||
```
|
||||
claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
claper: this container's mounts are all empty while it created entries in ['/app/priv', '/app/priv/static'] — benign when a sibling container holds the state, worth a look when none does
|
||||
```
|
||||
### crafty-controller (batch-02.txt)
|
||||
```
|
||||
crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
crafty-controller: declared volume /crafty/import is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
crafty-controller: declared volume /crafty/backups is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### dawarich (batch-02.txt)
|
||||
```
|
||||
dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### docmost (batch-02.txt)
|
||||
```
|
||||
docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
docmost: this container's mounts are all empty while it created entries in ['/app/apps/client/dist'] — benign when a sibling container holds the state, worth a look when none does
|
||||
```
|
||||
### gramps-web (batch-03.txt)
|
||||
```
|
||||
gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
gramps-web: declared volume /app/indexdir is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
gramps-web: declared volume /app/media is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### immich (batch-04.txt)
|
||||
```
|
||||
immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
immich-machine-learning: this container's mounts are all empty while it created entries in ['/'] — benign when a sibling container holds the state, worth a look when none does
|
||||
```
|
||||
### outline (batch-06.txt)
|
||||
```
|
||||
outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
outline-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### papra (batch-09-papra-rerun.txt)
|
||||
```
|
||||
papra: not running (status=restarting exit=137 restarts=None)
|
||||
```
|
||||
### plant-it (batch-06.txt)
|
||||
```
|
||||
no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
|
||||
Error response from daemon: pull access denied for msdeluise/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
|
||||
)
|
||||
probe error: no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
|
||||
Error response from daemon: pull access denied for msdeluise/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
|
||||
)
|
||||
```
|
||||
### plex (batch-06.txt)
|
||||
```
|
||||
plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### recipe-importer (batch-07.txt)
|
||||
```
|
||||
NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.
|
||||
recipe-importer: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
recipe-importer: this container's mounts are all empty while it created entries in ['/'] — benign when a sibling container holds the state, worth a look when none does
|
||||
```
|
||||
### sparkyfitness (batch-07.txt)
|
||||
```
|
||||
sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
sparkyfitness-server: declared volume /app/SparkyFitnessServer/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
sparkyfitness-server: this container's mounts are all empty while it created entries in ['/app/SparkyFitnessServer'] — benign when a sibling container holds the state, worth a look when none does
|
||||
```
|
||||
### tandoor (batch-08.txt)
|
||||
```
|
||||
tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### vikunja (batch-08.txt)
|
||||
```
|
||||
vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### wanderer (batch-08.txt)
|
||||
```
|
||||
wanderer: unhealthy
|
||||
wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
wanderer-db: declared volume /data/plugins is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
wanderer: this container's mounts are all empty while it created entries in ['/root'] — benign when a sibling container holds the state, worth a look when none does
|
||||
wanderer-db: writable-layer writes at /data (path suggests state, no database signature — judgement needed): ['plugins']
|
||||
```
|
||||
### wger (batch-08.txt)
|
||||
```
|
||||
wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### wishlist (batch-08.txt)
|
||||
```
|
||||
wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
```
|
||||
### zipline (batch-08.txt)
|
||||
```
|
||||
zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
zipline: declared volume /zipline/public is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
zipline: this container's mounts are all empty while it created entries in ['/zipline'] — benign when a sibling container holds the state, worth a look when none does
|
||||
```
|
||||
@@ -0,0 +1,38 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-01 actualbudget adventurelog audiobookshelf bentopdf bookstack calcom calibre-web
|
||||
# batch 01 started 2026-10-02T11:47:49Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
actualbudget CLEAN
|
||||
adventurelog CLEAN
|
||||
audiobookshelf CLEAN
|
||||
bentopdf UNDETERMINED nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data to locate. Health is not data: this is U
|
||||
bookstack CLEAN
|
||||
calcom CLEAN
|
||||
calibre-web CLEAN calibre-web: /app/calibre-web-automated/empty_library — database file(s) touched but byte-identical to the image; a chown sweep, not a write; calibre-
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
bentopdf: nothing was written to any mount and nothing data-classified in any writable layer — the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN
|
||||
|
||||
6 clean · 0 broken · 1 undetermined (of 7 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 01 finished 2026-10-02T12:06:35Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi actualbudget/actual-server:26.9.0: Deleted: sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8
|
||||
rmi calcom/cal.com:v6.2.0: Deleted: sha256:ac0b59386af04eb1adb3ecce007f7bfa052e5c2da2b2ab4d683a2e73ef866825
|
||||
rmi crocodilestick/calibre-web-automated:v4.0.8: Deleted: sha256:570560e87f1fd49773f66d9023984d132b3fa6a084c9860f5e9a16cf48a77b02
|
||||
rmi ghcr.io/advplyr/audiobookshelf:2.37.1: Deleted: sha256:d1b11da75466b874d025016f2bfa1d9fd5bf0d496fcd29c3a883d71ae3813305
|
||||
rmi ghcr.io/alam00000/bentopdf:v2.8.6: Deleted: sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1
|
||||
rmi ghcr.io/seanmorley15/adventurelog-backend:v0.13.0: Deleted: sha256:6f94328331290cbd81edab450664d42da7b64c191416c9346cd5d28c84f76035
|
||||
rmi ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0: Deleted: sha256:dd1bd006b01b2376c14e6d53a087269594004c64f8e841c350ec83af959359a0
|
||||
rmi lscr.io/linuxserver/bookstack:26.09.1: Deleted: sha256:2a166eefd3a01440135c036b5a9949974c0632d72ed8da69b97931ed975d7943
|
||||
rmi mariadb:12.3: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8
|
||||
rmi postgis/postgis:16-3.5-alpine: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.3G 185G 1% /
|
||||
@@ -0,0 +1,42 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-02 claper code-server crafty-controller dawarich docmost emby ghost
|
||||
# batch 02 started 2026-10-02T12:06:51Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
claper UNDETERMINED claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; claper:
|
||||
code-server CLEAN
|
||||
crafty-controller UNDETERMINED crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it; craft
|
||||
dawarich UNDETERMINED dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
docmost UNDETERMINED docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where the template preserves it; docmost: this
|
||||
emby CLEAN
|
||||
ghost CLEAN
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
claper: claper: declared volume /app/priv/static/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; claper: this container's mounts are all empty while it cr
|
||||
crafty-controller: crafty-controller: declared volume /crafty/servers is EMPTY after the exercise — the app was not shown to write where the template preserves it; crafty-controller: declared volume /crafty/import is EM
|
||||
dawarich: dawarich-redis: declared volume /data is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
docmost: docmost: declared volume /app/data/storage is EMPTY after the exercise — the app was not shown to write where the template preserves it; docmost: this container's mounts are all empty while it created
|
||||
|
||||
3 clean · 0 broken · 4 undetermined (of 7 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 4 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 02 finished 2026-10-02T12:27:29Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi docmost/docmost:0.96.0: Deleted: sha256:411a86676185cb54d695a805b238194a64e9b77e0c723f3802fbb87d333ea0b3
|
||||
rmi emby/embyserver:4.11.0.4: Deleted: sha256:0f8918d0fe4f272ce8acece89916a9ba0b240584d3c1dd1943f343f69b0d0ffb
|
||||
rmi freikin/dawarich:1.15.3: Deleted: sha256:3edb2192497af6e965b9b7e57dc6dbdce1f3ea721d14a98110419d4ded523298
|
||||
rmi ghcr.io/claperco/claper:2.5: Deleted: sha256:538812a4b9bd45adaac2b5e5b967daa6999aa44eb110aa32ae7c69702b906475
|
||||
rmi ghost:6.67.0-alpine: Deleted: sha256:e63b02c2b5c761df2cb95e657d744f27d95da4e051235a13c80b88cd68eab188
|
||||
rmi lscr.io/linuxserver/code-server:4.129.0: Deleted: sha256:c3cbb340bc39ecbf4b83ee7f6a316ec0fac5da776f4c1929f5fd432d575ff9c7
|
||||
rmi postgis/postgis:17-3.5-alpine: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi postgres:17-alpine: Deleted: sha256:e1620fab5a27ab00df25b18312374e46098fd95842107fa7e3c7f52547b4f121
|
||||
rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711
|
||||
rmi redis:7-alpine: Untagged: redis:7-alpine
|
||||
rmi redis:7.4-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839
|
||||
rmi registry.gitlab.com/crafty-controller/crafty-4:4.11.0: Deleted: sha256:65e5d715ea720349e6475f91651a0956279fc295a45fd73aa04f1cec046281a1
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.3G 185G 1% /
|
||||
@@ -0,0 +1,35 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-03 gitea glance gokapi grafana gramps-web grimmory home-assistant
|
||||
# batch 03 started 2026-10-02T12:27:43Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
gitea CLEAN
|
||||
glance CLEAN
|
||||
gokapi CLEAN
|
||||
grafana CLEAN
|
||||
gramps-web UNDETERMINED gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the template preserves it; gramps-web: decl
|
||||
grimmory CLEAN grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] — benign when a sibling container holds the state, w
|
||||
home-assistant CLEAN
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
gramps-web: gramps-web: declared volume /app/secret is EMPTY after the exercise — the app was not shown to write where the template preserves it; gramps-web: declared volume /app/indexdir is EMPTY after the exerc
|
||||
|
||||
6 clean · 0 broken · 1 undetermined (of 7 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 03 finished 2026-10-02T12:46:32Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi f0rc3/gokapi:v1.9.6: Deleted: sha256:ba79b2c0127890636a791eb3ec3993cce08a50cc01fcb1513f0e8fbae41977af
|
||||
rmi ghcr.io/gramps-project/grampsweb:v25.6.0: Deleted: sha256:2f7436e79a0bc6cdec6536da54ae6a5863c8e3b5f145e0f8ac0b96306baddbc9
|
||||
rmi ghcr.io/grimmory-tools/grimmory:v3.5.0: Deleted: sha256:215c7bd754081cf750e00fb94bb99fc5dac69903300f6ec07b86c9f265b3b915
|
||||
rmi ghcr.io/home-assistant/home-assistant:2026.9.4: Deleted: sha256:77e69aa15022f2dab499f24031ca2a8c68aa8891d848518ef4817058878a1d42
|
||||
rmi gitea/gitea:1.27.3: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi glanceapp/glance:v0.8.5: Deleted: sha256:0854555d70acaa318b38ee50bc667cb51ff6bf0757624624c7ff3b6fe17459a0
|
||||
rmi grafana/grafana:13.2.3: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711
|
||||
rmi mariadb:11.4: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.3G 185G 1% /
|
||||
@@ -0,0 +1,40 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-04 homebox homepage immich jellyfin karakeep kimai komga
|
||||
# batch 04 started 2026-10-02T12:46:42Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
homebox CLEAN
|
||||
homepage CLEAN
|
||||
immich UNDETERMINED immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it; immich-m
|
||||
jellyfin CLEAN
|
||||
karakeep CLEAN
|
||||
kimai CLEAN
|
||||
komga CLEAN
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
immich: immich-machine-learning: declared volume /cache is EMPTY after the exercise — the app was not shown to write where the template preserves it; immich-machine-learning: this container's mounts are all e
|
||||
|
||||
6 clean · 0 broken · 1 undetermined (of 7 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 04 finished 2026-10-02T13:02:31Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi getmeili/meilisearch:v1.41.0: Deleted: sha256:cce92674e98722970ab3fdce76a2566f54db535beeb24f0b4397f070ab5f6987
|
||||
rmi ghcr.io/gethomepage/homepage:v1.13.2: Deleted: sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1
|
||||
rmi ghcr.io/immich-app/immich-machine-learning:v3.2.4: Deleted: sha256:8db1b4d0e54f2fbc2baf1563e57d88a8e72d3c79a72a38b9e4dee36e84f1d8ce
|
||||
rmi ghcr.io/immich-app/immich-server:v3.2.4: Deleted: sha256:411a86676185cb54d695a805b238194a64e9b77e0c723f3802fbb87d333ea0b3
|
||||
rmi ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0: Deleted: sha256:eb5f13bce9936c760b9fa73aeb1b608787daa36106cc888104132e353ed37252
|
||||
rmi ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1: Deleted: sha256:f2ec4de84f559f5c7be4233b589cdbdbb5507807e05621b77320edd55a1f2a0f
|
||||
rmi ghcr.io/karakeep-app/karakeep:0.33.2: Deleted: sha256:81f823b9617547261c907396f63f770deaa554748ff739bedfa650e3bb74595a
|
||||
rmi ghcr.io/sysadminsmedia/homebox:0.26.2: Deleted: sha256:bc5a3fe779ad9e705b6c5d7fb7a482d1bf8b633e4e3e72152ea3f8953460cda9
|
||||
rmi gotson/komga:1.28.0: Deleted: sha256:485d137fd3bfb545f1b417ea708e2281594be7a334e8a85ab75c5332db6089e9
|
||||
rmi jellyfin/jellyfin:10.11.11: Deleted: sha256:219a998c60509502b47b97f1158067d5dd62640d2d689560d32cfd5594f6bc40
|
||||
rmi kimai/kimai2:2.67.0: Deleted: sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8
|
||||
rmi mariadb:11.8: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8
|
||||
rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.3G 185G 1% /
|
||||
@@ -0,0 +1,33 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-05 mealie metube n8n navidrome nextcloud onlyoffice opengist
|
||||
# batch 05 started 2026-10-02T13:02:39Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
mealie CLEAN
|
||||
metube CLEAN
|
||||
n8n CLEAN
|
||||
navidrome CLEAN
|
||||
nextcloud CLEAN
|
||||
onlyoffice CLEAN onlyoffice: writable-layer writes at /var/www/onlyoffice/documentserver/sdkjs-plugins/{07FD8DFA-DFE0-4089-AL24-0730933CC80A}/resources/store (path sug
|
||||
opengist CLEAN
|
||||
|
||||
7 clean · 0 broken · 0 undetermined (of 7 in scope)
|
||||
volume-persistence gate OK
|
||||
check-volume-persistence exit code = 0
|
||||
# batch 05 finished 2026-10-02T13:19:32Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi deluan/navidrome:0.64.2: Deleted: sha256:f0dd00851e339a40ac77d88b5174441169a5052dd18fa399fc174dd710662990
|
||||
rmi ghcr.io/alexta69/metube:2026.09.29: Deleted: sha256:7eb8357547f12f331ee069361f87420db6b522e3c35e94830c50eb0c133d8d5e
|
||||
rmi ghcr.io/mealie-recipes/mealie:v3.28.0: Deleted: sha256:acc27b89f4a07b2a31f349e11d761c366d19e64b7b8e08498e47a537880da6a3
|
||||
rmi ghcr.io/thomiceli/opengist:1.15: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi mariadb:12.3: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8
|
||||
rmi n8nio/n8n:2.42.1: Deleted: sha256:87e8744ef8d6da508455c6acc8b02a0f64c95d91e833e26652d9d81f6f75d521
|
||||
rmi nextcloud:34.0.4-apache: Deleted: sha256:a6dc765193a52cbaede3c93a9ff48b9540948dd0774bbe7031fcb5847606f9ac
|
||||
rmi onlyoffice/documentserver:9.4.0: Deleted: sha256:538812a4b9bd45adaac2b5e5b967daa6999aa44eb110aa32ae7c69702b906475
|
||||
rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.4G 185G 1% /
|
||||
@@ -0,0 +1,39 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-06 outline paperless-ngx papra plant-it plex privatebin radarr
|
||||
# batch 06 started 2026-10-02T13:19:43Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
outline UNDETERMINED outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write where the template preserves it; outline-r
|
||||
paperless-ngx CLEAN
|
||||
papra UNDETERMINED papra: not running (status=restarting exit=137 restarts=None)
|
||||
plant-it UNDETERMINED no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resourc
|
||||
plex UNDETERMINED plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
privatebin CLEAN
|
||||
radarr CLEAN radarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['movies']
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
outline: outline: declared volume /var/lib/outline/data is EMPTY after the exercise — the app was not shown to write where the template preserves it; outline-redis: declared volume /data is EMPTY after the exe
|
||||
papra: papra: not running (status=restarting exit=137 restarts=None)
|
||||
plant-it: no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
|
||||
Error response from daemon: pull acces
|
||||
plex: plex: declared volume /transcode is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
|
||||
3 clean · 0 broken · 4 undetermined (of 7 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 4 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 06 finished 2026-10-02T13:38:47Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi ghcr.io/paperless-ngx/paperless-ngx:2.20.15: Deleted: sha256:70a290c5e58b68f39496ab93a62f21b8b2ca0502e97905131838de1b39a37cbb
|
||||
rmi ghcr.io/papra-hq/papra:26.6.2-rootless: Deleted: sha256:3edb2192497af6e965b9b7e57dc6dbdce1f3ea721d14a98110419d4ded523298
|
||||
rmi lscr.io/linuxserver/radarr:6.4.4: Deleted: sha256:2a166eefd3a01440135c036b5a9949974c0632d72ed8da69b97931ed975d7943
|
||||
rmi outlinewiki/outline:1.10.1: Deleted: sha256:f4f8b983b714f130e2cff99176baa26352db6a55d3622e10ada40f2b4720a4eb
|
||||
rmi plexinc/pms-docker:1.41.4.9463-630c9f557: Deleted: sha256:fffe76c64ef2dee2d80a8bb3ad13d65d596d04a45510b1956a976a69215dae92
|
||||
rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711
|
||||
rmi privatebin/pdo:2.0.6: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.4G 185G 1% /
|
||||
@@ -0,0 +1,39 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-07 radicale rallly recipe-importer romm seerr sonarr sparkyfitness
|
||||
# batch 07 started 2026-10-02T13:38:54Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
radicale CLEAN
|
||||
rallly CLEAN
|
||||
recipe-importer UNDETERMINED NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/'].
|
||||
romm CLEAN
|
||||
seerr CLEAN
|
||||
sonarr CLEAN sonarr: writable-layer writes at /media (path suggests state, no database signature — judgement needed): ['tv']
|
||||
sparkyfitness UNDETERMINED sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
recipe-importer: NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.; recipe-importer: declared vo
|
||||
sparkyfitness: sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise — the app was not shown to write where the template preserves it; sparkyfitness-server: declared volum
|
||||
|
||||
5 clean · 0 broken · 2 undetermined (of 7 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 2 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 07 finished 2026-10-02T13:55:18Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi codewithcj/sparkyfitness:v0.17.3: Deleted: sha256:256f393e029fa2063d8c93720da36a74a032bed3355a2bc3e313ad12f8bde9d1
|
||||
rmi codewithcj/sparkyfitness_server:v0.17.3: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi fallenbagel/jellyseerr:2.7.3: Deleted: sha256:418dccb7d85a63a6aa574439840f7a6fa6fd2321b3e2394568a317735e867d35
|
||||
rmi ghcr.io/kozea/radicale:3.8.1: Deleted: sha256:068f42d7c61f0f0e344fa35ad66e109e3d089007afcc39110f9f361a75eaca24
|
||||
rmi gitea.dooplex.hu/admin/recipe-importer:v0.9.11: Deleted: sha256:a257f20c716c7b5d0474b1b5998f4d1090b573d90b82f764b8f1f1faeb4b524f
|
||||
rmi lscr.io/linuxserver/sonarr:4.0.20: Deleted: sha256:2a166eefd3a01440135c036b5a9949974c0632d72ed8da69b97931ed975d7943
|
||||
rmi lukevella/rallly:4.15.3: Deleted: sha256:34467cc93912af891dfee8a3902adf9b4f355a9bca4eaa46f658d1181a21de0d
|
||||
rmi mariadb:11.8: Deleted: sha256:d81fb2a7c6ee3be05fdefaa7fd223be219c1ab172083ec1b994c3ecda33ac0a8
|
||||
rmi postgres:18-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711
|
||||
rmi redis:7-alpine: Deleted: sha256:1073f425247ed24670458429c13a67afbd36f83d2004dade046ddbd6519b1839
|
||||
rmi rommapp/romm:5.3.1: Deleted: sha256:575af51c6d53817070d5b9e4f03a5ea98bb687c097741ea228fc8db065db558b
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.4G 185G 1% /
|
||||
@@ -0,0 +1,47 @@
|
||||
# check-volume-persistence.py --all --evidence /root/sweep/ev-08 tandoor termix uptime-kuma vaultwarden vikunja wanderer wger wishlist zipline
|
||||
# batch 08 started 2026-10-02T13:55:25Z on bench LXC 9401 @ demo-hp (debian-13 amd64, swap 0, nvme-scratch 200G), docker hub logged in
|
||||
# catalog-wt febf58c + uncommitted:
|
||||
# M scripts/check-volume-persistence.py
|
||||
# M scripts/test_check_volume_persistence.py
|
||||
# check-volume-persistence.py sha256 ecc6a6945f8bcdf4
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
tandoor UNDETERMINED tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
termix CLEAN
|
||||
uptime-kuma CLEAN
|
||||
vaultwarden CLEAN
|
||||
vikunja UNDETERMINED vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
wanderer UNDETERMINED wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves
|
||||
wger UNDETERMINED wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
wishlist UNDETERMINED wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
zipline UNDETERMINED zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; zipline: decla
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
tandoor: tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
vikunja: vikunja: declared volume /app/vikunja/files is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
wanderer: wanderer: unhealthy; wanderer: declared volume /app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; wanderer-db: declared volume /data/plugins is
|
||||
wger: wger: declared volume /home/wger/media is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
wishlist: wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it
|
||||
zipline: zipline: declared volume /zipline/uploads is EMPTY after the exercise — the app was not shown to write where the template preserves it; zipline: declared volume /zipline/public is EMPTY after the exer
|
||||
|
||||
3 clean · 0 broken · 6 undetermined (of 9 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 6 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
# batch 08 finished 2026-10-02T14:19:38Z
|
||||
# leftover volgate containers: 0
|
||||
# --- cleanup (by name; no prune) ---
|
||||
rmi flomp/wanderer-db:v0.20.0: Deleted: sha256:fea850b45905deb562386275d9f75fafd2087d6ef8bc189fa2cf2ec0cfc4dd71
|
||||
rmi flomp/wanderer-web:v0.20.0: Deleted: sha256:34884abbe92863fce933ed7c39c0e045631af0ed86d5cc0dfbdf9fdca426ce3c
|
||||
rmi getmeili/meilisearch:v1.36.0: Deleted: sha256:cce92674e98722970ab3fdce76a2566f54db535beeb24f0b4397f070ab5f6987
|
||||
rmi ghcr.io/cmintey/wishlist:v0.67.1: Deleted: sha256:1d69a5fd31932841d7825ef4780c06f008eea65aaa9f3110fe09d5832ed5c7d8
|
||||
rmi ghcr.io/diced/zipline:4.8.0: Deleted: sha256:e63b02c2b5c761df2cb95e657d744f27d95da4e051235a13c80b88cd68eab188
|
||||
rmi ghcr.io/lukegus/termix:2.8.0: Deleted: sha256:a6dc765193a52cbaede3c93a9ff48b9540948dd0774bbe7031fcb5847606f9ac
|
||||
rmi ghcr.io/tandoorrecipes/recipes:2.6.15: Deleted: sha256:31ad4a471c6852bfec14d757cc75a566c82a9769f12c3918cf6bf52cc0eeb3d0
|
||||
rmi louislam/uptime-kuma:2.5.5: Deleted: sha256:b2008ac19409fa6fee4b52596271400498aebd0be04dffac5351bd1dcf230f2a
|
||||
rmi postgres:16-alpine: Deleted: sha256:32034eca5c342e5e224fa97bff71b9c8d6edb64d4043660558dfed1b247cce29
|
||||
rmi postgres:17-alpine: Deleted: sha256:74d97c428c51a828f9051a7a40a53ff1fc99e54fc30323ce36760701b0b7f711
|
||||
rmi vaultwarden/server:1.36.0-alpine: Deleted: sha256:29df493baa13de438d6d2ece3a8333032e0b7b9b9d8cce4ee82194da255f61e1
|
||||
rmi vikunja/vikunja:2.6.0: Deleted: sha256:3c889b99e3ccd594794c0c3738db5c8150535d0894b764667dfa041bb51c8dfe
|
||||
rmi wger/server:2.7: Deleted: sha256:b9a65b3c65ab22d490085bd0bf5490e2409da8748b406870f2463bdc41cd6795
|
||||
# images now: 1; volgate volumes now: 0
|
||||
/dev/loop2 196G 1.4G 185G 1% /
|
||||
@@ -0,0 +1,11 @@
|
||||
# papra re-run alone (exit 137 in batch 06) 2026-10-02T14:20:34Z
|
||||
self-testing the prober (both directions)…
|
||||
prober flags the R-156 signature and clears a correct template — trustworthy
|
||||
papra UNDETERMINED papra: not running (status=restarting exit=137 restarts=None)
|
||||
|
||||
UNDETERMINED — NOT a pass. The question was not answered for these:
|
||||
papra: papra: not running (status=restarting exit=137 restarts=None)
|
||||
|
||||
0 clean · 0 broken · 1 undetermined (of 1 in scope)
|
||||
INCOMPLETE — no broken template among those decided, but 1 were never decided. This is not a clean bill of health.
|
||||
check-volume-persistence exit code = 2
|
||||
@@ -0,0 +1,55 @@
|
||||
+ date -u
|
||||
Fri Oct 2 11:45:45 UTC 2026
|
||||
+ pct list
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19503216 18863044 48.21%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 77370516 855982572 7.87%
|
||||
+ pct config 9401
|
||||
+ head -1
|
||||
Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist
|
||||
+ pveam list local
|
||||
+ grep debian-13
|
||||
local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst 123.93MB
|
||||
+ pct create 9401 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst --hostname volgate-sweep --cores 6 --memory 12288 --swap 0 --rootfs nvme-scratch:200 --net0 name=eth0,bridge=vmbr0,ip=dhcp --unprivileged 1 --features nesting=1,keyctl=1 --onboot 0
|
||||
+ tail -1
|
||||
done: SHA256:Z6wLOMGtPMNgxH7pwJ0jpFTf4llG+Hqwh1t1WMq0U2A root@volgate-sweep
|
||||
+ pct config 9401
|
||||
arch: amd64
|
||||
cores: 6
|
||||
features: nesting=1,keyctl=1
|
||||
hostname: volgate-sweep
|
||||
memory: 12288
|
||||
net0: name=eth0,bridge=vmbr0,hwaddr=BC:24:11:D8:CF:F8,ip=dhcp,type=veth
|
||||
onboot: 0
|
||||
ostype: debian
|
||||
rootfs: nvme-scratch:9401/vm-9401-disk-0.raw,size=200G
|
||||
swap: 0
|
||||
unprivileged: 1
|
||||
+ pct start 9401
|
||||
+ sleep 15
|
||||
+ pct exec 9401 -- bash -c 'dpkg --print-architecture; hostname; ip -4 -o addr show eth0 | awk "{print \$4}"; apt-get update -qq >/dev/null 2>&1; DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker.io docker-compose python3 python3-yaml curl postgresql-client sqlite3 git >/dev/null 2>&1; docker --version; docker compose version; python3 --version; git --version; docker network create traefik-public >/dev/null && echo traefik-public-net; swapon --show; free -m | head -3; df -h /'
|
||||
amd64
|
||||
volgate-sweep
|
||||
192.168.0.123/24
|
||||
Docker version 26.1.5+dfsg1, build a72d7cd
|
||||
Docker Compose version 2.26.1-4
|
||||
Python 3.13.5
|
||||
git version 2.47.3
|
||||
traefik-public-net
|
||||
total used free shared buff/cache available
|
||||
Mem: 12288 58 10530 0 1699 12229
|
||||
Swap: 0 0 0
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
/dev/loop2 196G 1.3G 185G 1% /
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19503308 18862952 48.21%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 79803936 853549152 8.12%
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "actualbudget",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "actualbudget/actual-server:26.9.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2,
|
||||
"name": "volgate-actualbudget_actualbudget_data",
|
||||
"sample": [
|
||||
".migrate",
|
||||
"server-files/account.sqlite"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-actualbudget_actualbudget_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "actualbudget",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"actualbudget_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:5006/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
5006
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+251
@@ -0,0 +1,251 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "adventurelog",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 12,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 4,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"etc",
|
||||
"code",
|
||||
"var",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"adventurelog"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"adventurelog"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"cron.env"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/adventurelog",
|
||||
"files": [
|
||||
"cron.env"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"lib"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var/lib",
|
||||
"files": [
|
||||
"nginx"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 18,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/seanmorley15/adventurelog-backend:v0.13.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 251,
|
||||
"name": "volgate-adventurelog_adventurelog_media",
|
||||
"sample": [
|
||||
"countries+regions+states-v3.1.json",
|
||||
"flags/gh.png",
|
||||
"flags/me.png",
|
||||
"flags/cf.png",
|
||||
"flags/tn.png",
|
||||
"flags/mm.png",
|
||||
"flags/ao.png",
|
||||
"flags/im.png",
|
||||
"flags/af.png",
|
||||
"flags/na.png",
|
||||
"flags/sm.png",
|
||||
"flags/bg.png",
|
||||
"flags/gi.png",
|
||||
"flags/is.png",
|
||||
"flags/dm.png",
|
||||
"flags/eg.png",
|
||||
"flags/tm.png",
|
||||
"flags/mq.png",
|
||||
"flags/pw.png",
|
||||
"flags/ge.png",
|
||||
"flags/ms.png",
|
||||
"flags/yt.png",
|
||||
"flags/cl.png",
|
||||
"flags/ga.png",
|
||||
"flags/zm.png",
|
||||
"flags/az.png",
|
||||
"flags/gd.png",
|
||||
"flags/cd.png",
|
||||
"flags/so.png",
|
||||
"flags/ie.png",
|
||||
"flags/ht.png",
|
||||
"flags/sh.png",
|
||||
"flags/ee.png",
|
||||
"flags/al.png",
|
||||
"flags/ad.png",
|
||||
"flags/uz.png",
|
||||
"flags/eh.png",
|
||||
"flags/bq.png",
|
||||
"flags/la.png",
|
||||
"flags/ki.png"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-adventurelog_adventurelog_media/_data",
|
||||
"target": "/code/media",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "adventurelog",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 65532,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0",
|
||||
"mounts": [],
|
||||
"name": "adventurelog-frontend",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 65532
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgis/postgis:16-3.5-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2313,
|
||||
"name": "volgate-adventurelog_adventurelog_postgres_data",
|
||||
"sample": [
|
||||
"pg_ident.conf",
|
||||
"pg_hba.conf",
|
||||
"postmaster.pid",
|
||||
"postgresql.conf",
|
||||
"PG_VERSION",
|
||||
"postgresql.auto.conf",
|
||||
"postmaster.opts",
|
||||
"base/5/2612",
|
||||
"base/5/1418",
|
||||
"base/5/6117",
|
||||
"base/5/2655",
|
||||
"base/5/3609",
|
||||
"base/5/2662",
|
||||
"base/5/2683",
|
||||
"base/5/2832",
|
||||
"base/5/2679",
|
||||
"base/5/2608_vm",
|
||||
"base/5/2673",
|
||||
"base/5/2690",
|
||||
"base/5/2336",
|
||||
"base/5/2754",
|
||||
"base/5/2701",
|
||||
"base/5/4168",
|
||||
"base/5/2650",
|
||||
"base/5/2839",
|
||||
"base/5/2688",
|
||||
"base/5/2840",
|
||||
"base/5/1247_fsm",
|
||||
"base/5/3997",
|
||||
"base/5/3456_vm",
|
||||
"base/5/2667",
|
||||
"base/5/2678",
|
||||
"base/5/2696",
|
||||
"base/5/3456",
|
||||
"base/5/2228",
|
||||
"base/5/1259_fsm",
|
||||
"base/5/6106",
|
||||
"base/5/3433",
|
||||
"base/5/4150",
|
||||
"base/5/3606"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-adventurelog_adventurelog_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "adventurelog-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"adventurelog_media",
|
||||
"adventurelog_postgres_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 200",
|
||||
"172.21.0.3:3000/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
80,
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "audiobookshelf",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 4,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"podcasts",
|
||||
"audiobooks",
|
||||
"metadata",
|
||||
"config"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"podcasts",
|
||||
"audiobooks",
|
||||
"metadata",
|
||||
"config"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/advplyr/audiobookshelf:2.37.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/audiobooks",
|
||||
"target": "/audiobooks",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/podcasts",
|
||||
"target": "/podcasts",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 16,
|
||||
"name": "volgate-audiobookshelf_audiobookshelf_config",
|
||||
"sample": [
|
||||
"absdatabase.sqlite",
|
||||
"migrations/v2.19.1-copy-title-to-library-items.js",
|
||||
"migrations/v2.17.3-fk-constraints.js",
|
||||
"migrations/v2.15.2-index-creation.js",
|
||||
"migrations/v2.17.5-remove-host-from-feed-urls.js",
|
||||
"migrations/v2.20.0-improve-author-sort-queries.js",
|
||||
"migrations/v2.17.7-add-indices.js",
|
||||
"migrations/v2.15.0-series-column-unique.js",
|
||||
"migrations/v2.17.0-uuid-replacement.js",
|
||||
"migrations/v2.17.4-use-subfolder-for-oidc-redirect-uris.js",
|
||||
"migrations/v2.26.0-create-auth-tables.js",
|
||||
"migrations/v2.33.0-add-discover-query-indexes.js",
|
||||
"migrations/v2.15.1-reindex-nocase.js",
|
||||
"migrations/v2.17.6-share-add-isdownloadable.js",
|
||||
"migrations/v2.35.0-add-last-refresh-token.js",
|
||||
"migrations/v2.19.4-improve-podcast-queries.js"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-audiobookshelf_audiobookshelf_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-audiobookshelf_audiobookshelf_metadata",
|
||||
"sample": [
|
||||
"logs/daily/2026-10-02.txt"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-audiobookshelf_audiobookshelf_metadata/_data",
|
||||
"target": "/metadata",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "audiobookshelf",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"audiobookshelf_config",
|
||||
"audiobookshelf_metadata"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:80/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
80
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "bentopdf",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 6,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"var",
|
||||
"etc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"nginx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"cache"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 14,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 101,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/alam00000/bentopdf:v2.8.6",
|
||||
"mounts": [],
|
||||
"name": "bentopdf",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 101
|
||||
}
|
||||
],
|
||||
"declared_volumes": [],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8080/ -> 200",
|
||||
"172.18.0.2:8080/ -> 200",
|
||||
"172.18.0.2:8080/login -> 404",
|
||||
"172.18.0.2:8080/setup -> 404",
|
||||
"172.18.0.2:8080/signup -> 404",
|
||||
"172.18.0.2:8080/register -> 404",
|
||||
"172.18.0.2:8080/install -> 404",
|
||||
"172.18.0.2:8080/admin -> 404",
|
||||
"172.18.0.2:8080/api/health -> 404",
|
||||
"172.18.0.2:8080/health -> 404",
|
||||
"172.18.0.2:8080/healthz -> 404",
|
||||
"172.18.0.2:8080/status -> 404",
|
||||
"172.18.0.2:8080/web -> 404",
|
||||
"172.18.0.2:8080/index.php -> 404",
|
||||
"172.18.0.2:8080/dashboard -> 404"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8080
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"nothing was written to any mount and nothing data-classified in any writable layer \u2014 the app produced no data to locate. Health is not data: this is UNDETERMINED, not CLEAN"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+254
@@ -0,0 +1,254 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "bookstack",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 248,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 6,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"defaults",
|
||||
"etc",
|
||||
"usr",
|
||||
"app",
|
||||
"var",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 5,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"crontabs",
|
||||
"passwd-",
|
||||
"logrotate.d",
|
||||
"group-",
|
||||
"s6-overlay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/crontabs",
|
||||
"files": [
|
||||
"root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay",
|
||||
"files": [
|
||||
"s6-rc.d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d",
|
||||
"files": [
|
||||
"init-adduser"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d/init-adduser",
|
||||
"files": [
|
||||
"branding"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"lib"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"lib",
|
||||
"log"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var/lib",
|
||||
"files": [
|
||||
"nginx"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 278,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "lscr.io/linuxserver/bookstack:26.09.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 22,
|
||||
"name": "volgate-bookstack_bookstack_config",
|
||||
"sample": [
|
||||
".migrations",
|
||||
"keys/cert.crt",
|
||||
"keys/cert.key",
|
||||
"php/www2.conf",
|
||||
"php/php-local.ini",
|
||||
"log/php/error.log",
|
||||
"log/nginx/access.log",
|
||||
"log/nginx/error.log",
|
||||
"nginx/worker_processes.conf",
|
||||
"nginx/nginx.conf",
|
||||
"nginx/nginx.conf.sample",
|
||||
"nginx/resolver.conf",
|
||||
"nginx/ssl.conf",
|
||||
"nginx/ssl.conf.sample",
|
||||
"nginx/site-confs/default.conf",
|
||||
"nginx/site-confs/default.conf.sample",
|
||||
"www/.env",
|
||||
"www/index.html",
|
||||
"www/framework/sessions/SLuOJjkQuFQsL6gg9CusAB8UQhSbJdCDF1aKaU1T",
|
||||
"www/framework/sessions/uiYBj6sj13SEzi2Q35iTFw96jgGfPta08t7ywIhC",
|
||||
"www/framework/sessions/FpHKVCsJDznfkVyK9dbd6S41422rvGKTxZshqdT6",
|
||||
"www/framework/sessions/7TrTRDmQEdVh7D017tnhGndTETROnvKEa15IyHPJ"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-bookstack_bookstack_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "bookstack",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "mariadb:12.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 291,
|
||||
"name": "volgate-bookstack_bookstack_db_data",
|
||||
"sample": [
|
||||
"tc.log",
|
||||
".my-healthcheck.cnf",
|
||||
"aria_log.00000001",
|
||||
"aria_log_control",
|
||||
"undo001",
|
||||
"ibtmp1",
|
||||
"ib_buffer_pool",
|
||||
"ibdata1",
|
||||
"undo002",
|
||||
"multi-master.info",
|
||||
"mariadb_upgrade_info",
|
||||
"ddl_recovery.log",
|
||||
"ib_logfile0",
|
||||
"undo003",
|
||||
"bookstack/role_user.frm",
|
||||
"bookstack/failed_jobs.frm",
|
||||
"bookstack/activities.ibd",
|
||||
"bookstack/favourites.frm",
|
||||
"bookstack/deletions.ibd",
|
||||
"bookstack/joint_permissions.ibd",
|
||||
"bookstack/api_tokens.frm",
|
||||
"bookstack/cache.ibd",
|
||||
"bookstack/tags.frm",
|
||||
"bookstack/webhook_tracked_events.frm",
|
||||
"bookstack/social_accounts.frm",
|
||||
"bookstack/roles.ibd",
|
||||
"bookstack/sessions.frm",
|
||||
"bookstack/permission_role.frm",
|
||||
"bookstack/user_invites.ibd",
|
||||
"bookstack/api_tokens.ibd",
|
||||
"bookstack/images.ibd",
|
||||
"bookstack/users.ibd",
|
||||
"bookstack/migrations.ibd",
|
||||
"bookstack/permission_role.ibd",
|
||||
"bookstack/references.ibd",
|
||||
"bookstack/role_permissions.ibd",
|
||||
"bookstack/mfa_values.ibd",
|
||||
"bookstack/webhook_tracked_events.ibd",
|
||||
"bookstack/entity_container_data.ibd",
|
||||
"bookstack/entity_permissions.frm"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-bookstack_bookstack_db_data/_data",
|
||||
"target": "/var/lib/mysql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "bookstack-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"bookstack_config",
|
||||
"bookstack_db_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_PASSWORD",
|
||||
"APP_KEY",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:80/ -> 302",
|
||||
"172.22.0.3:80/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
80
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+1056
File diff suppressed because it is too large
Load Diff
+3143
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,184 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "claper",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"priv"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"static"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app/priv",
|
||||
"files": [
|
||||
"static"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"uploads"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app/priv/static",
|
||||
"files": [
|
||||
"uploads"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/claperco/claper:2.5",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-claper_claper_uploads",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-claper_claper_uploads/_data",
|
||||
"target": "/app/priv/static/uploads",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "claper",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:17-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1471,
|
||||
"name": "volgate-claper_claper_postgres_data",
|
||||
"sample": [
|
||||
"pg_ident.conf",
|
||||
"pg_hba.conf",
|
||||
"postmaster.pid",
|
||||
"postgresql.conf",
|
||||
"PG_VERSION",
|
||||
"postgresql.auto.conf",
|
||||
"postmaster.opts",
|
||||
"base/5/2612",
|
||||
"base/5/1418",
|
||||
"base/5/6117",
|
||||
"base/5/13510_fsm",
|
||||
"base/5/2655",
|
||||
"base/5/3609",
|
||||
"base/5/2662",
|
||||
"base/5/2683",
|
||||
"base/5/2832",
|
||||
"base/5/13500_vm",
|
||||
"base/5/2679",
|
||||
"base/5/2608_vm",
|
||||
"base/5/2673",
|
||||
"base/5/2690",
|
||||
"base/5/2336",
|
||||
"base/5/2754",
|
||||
"base/5/2701",
|
||||
"base/5/4168",
|
||||
"base/5/2650",
|
||||
"base/5/2839",
|
||||
"base/5/2688",
|
||||
"base/5/2840",
|
||||
"base/5/1247_fsm",
|
||||
"base/5/3997",
|
||||
"base/5/3456_vm",
|
||||
"base/5/2667",
|
||||
"base/5/2678",
|
||||
"base/5/2696",
|
||||
"base/5/3456",
|
||||
"base/5/2228",
|
||||
"base/5/1259_fsm",
|
||||
"base/5/6106",
|
||||
"base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-claper_claper_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "claper-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"claper_postgres_data",
|
||||
"claper_uploads"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_PASSWORD",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY_BASE",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:4000/ -> 200",
|
||||
"172.26.0.3:4000/ -> 200",
|
||||
"fixture Claper: seed OK \u2014 claper: seeded user drill-f9ed4c26@gate.invalid"
|
||||
],
|
||||
"fixture": "fixture Claper: seed OK \u2014 claper: seeded user drill-f9ed4c26@gate.invalid",
|
||||
"ports": [
|
||||
4000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"claper: declared volume /app/priv/static/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"claper: this container's mounts are all empty while it created entries in ['/app/priv', '/app/priv/static'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+120
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "code-server",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 196,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 4,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"defaults",
|
||||
"etc",
|
||||
"app",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"group-",
|
||||
"passwd-",
|
||||
"s6-overlay"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay",
|
||||
"files": [
|
||||
"s6-rc.d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d",
|
||||
"files": [
|
||||
"init-adduser"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d/init-adduser",
|
||||
"files": [
|
||||
"branding"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 208,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "lscr.io/linuxserver/code-server:4.129.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 12,
|
||||
"name": "volgate-codeserver_codeserver_config",
|
||||
"sample": [
|
||||
".profile",
|
||||
".bashrc",
|
||||
".cache/Microsoft/DeveloperTools/deviceid",
|
||||
".local/share/code-server/heartbeat",
|
||||
".local/share/code-server/coder-logs/code-server-stdout.log",
|
||||
".local/share/code-server/coder-logs/code-server-stderr.log",
|
||||
"extensions/extensions.json",
|
||||
".config/code-server/config.yaml",
|
||||
"data/code-server-ipc.sock",
|
||||
"data/logs/20261002T141202/remoteagent.log",
|
||||
"data/logs/20261002T141202/mcpGateway.log",
|
||||
"data/CachedProfilesData/__default__profile__/extensions.builtin.cache"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-codeserver_codeserver_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "code-server",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"codeserver_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"PASSWORD",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8443/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8443
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+6189
File diff suppressed because it is too large
Load Diff
+361
@@ -0,0 +1,361 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "dawarich",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 5111,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"var"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 5116,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "freikin/dawarich:1.15.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-dawarich_dawarich_watched",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_watched/_data",
|
||||
"target": "/var/app/tmp/imports/watched",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-dawarich_dawarich_storage",
|
||||
"sample": [
|
||||
".keep"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_storage/_data",
|
||||
"target": "/var/app/storage",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 646,
|
||||
"name": "volgate-dawarich_dawarich_public",
|
||||
"sample": [
|
||||
"400.html",
|
||||
"icon.svg",
|
||||
"site.webmanifest",
|
||||
"favicon.ico",
|
||||
"404.html",
|
||||
"apple-touch-icon-precomposed.png",
|
||||
"apple-touch-icon.png",
|
||||
"406-unsupported-browser.html",
|
||||
"icon-512.png",
|
||||
"422.html",
|
||||
"500.html",
|
||||
"icon-192-maskable.png",
|
||||
"icon-512-maskable.png",
|
||||
"robots.txt",
|
||||
"icon-192.png",
|
||||
"icon.png",
|
||||
".well-known/assetlinks.json",
|
||||
".well-known/apple-app-site-association",
|
||||
"assets/turbo.min-b86d83036ff04169e5bf3ebbc82e0ad528456259e47091b448f41a3cadabdb40.js.gz",
|
||||
"assets/achievements-de86cbccec6f7fcb81e35bc8c035982f0192a543534d9d29486cd2d9cd383504.css",
|
||||
"assets/application-0a04ba66afa1fa29d9079d22048b5ff5a211f1b597cc569f315784b4f21e68d6.css.gz",
|
||||
"assets/application-6739e9e5befc5afb1c8035d71ddc83acb274c0ccb24a6171c1e27cc5aeb57e11.js.gz",
|
||||
"assets/maps_maplibre_panel-2143bca483b257f4798b58d75803ede7d622e4479c4e0e1b7b02bb8347f65d9a.css.gz",
|
||||
"assets/Inter-roman.latin-ext.var-46bc23ba7e33ea447579cd95b95f34665d7560377065b72f3a77df8bca4b0e5c.woff2",
|
||||
"assets/Inter-italic.latin-ext.var-802705fb8496b82eda3f410c7e70a35c9407ba98b97cc5d9754db82750466fad.woff2",
|
||||
"assets/trix-27b67936197943926cb14d19903e2a81f4ed2cb745aec0e8f198e70ddf292774.css",
|
||||
"assets/posthog-e801a7c556e92fcb63d04dd9296eca08930ce3eb785518770ed3f60b84e62b02.js",
|
||||
"assets/actiontext-7c6127c5682cea9debf5454351dae886079b68330ba4f5299bd31d4de53a761b.css",
|
||||
"assets/mp4-muxer-3395e507185a33132f10b664d1c577e8593fec15d75b952e629d828f9b684ae4.js.gz",
|
||||
"assets/Inter-roman.cyrillic.var-8aa524d3da3b8fd4a03ff2d0d41ea50520113fb2e8ae57c15079dabea44b3529.woff2",
|
||||
"assets/activestorage.esm-3f2e9c040e7870f701a98bbbb1c77c979bbbdab80af967b59174f14d9388a0c1.js",
|
||||
"assets/turbo.min.js-c6732dc7c1683ff78fbfb710f7dda227e58db136b253b8d07628207a5ccdb6b7.map.gz",
|
||||
"assets/activestorage-540a3fb0ba30935e8ef6a0c69d58dec4561a97dcfd297908db089c4d725bb22a.js.gz",
|
||||
"assets/application.tailwind-b198a91fdd7f7b90dc81a8108870b999692bb21890338a4cc47bc0c129280624.css",
|
||||
"assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js",
|
||||
"assets/brand_fonts-3cf2ea412ef4dfc5717c1bd2357c4f10cfcb0cfa8f2df789bad54925d8ac4d36.css",
|
||||
"assets/logo-e019d04aed76f3c68a9289e687cc788067b9c0a283949e7cac9a6ba6aef8b2fc.svg.gz",
|
||||
"assets/Inter-roman.alternates.var-29781a209d7978155bf343eb1653779269965fa4a43d504b1fb361ab20e8487b.woff2",
|
||||
"assets/favicon-2e5b300516831fcc0f9b76243d556ca802455bb2764cf158b36ecf3c69147ca8.jpeg",
|
||||
"assets/manifest-597b5199768f5efff6ec880a4180aec95099b04608cc46e56dfe4e0940ee4665.js"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_public/_data",
|
||||
"target": "/var/app/public",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "dawarich",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgis/postgis:17-3.5-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2358,
|
||||
"name": "volgate-dawarich_dawarich_db_data",
|
||||
"sample": [
|
||||
"pg_ident.conf",
|
||||
"pg_hba.conf",
|
||||
"postmaster.pid",
|
||||
"postgresql.conf",
|
||||
"PG_VERSION",
|
||||
"postgresql.auto.conf",
|
||||
"postmaster.opts",
|
||||
"base/5/2612",
|
||||
"base/5/1418",
|
||||
"base/5/6117",
|
||||
"base/5/13510_fsm",
|
||||
"base/5/2655",
|
||||
"base/5/3609",
|
||||
"base/5/2662",
|
||||
"base/5/2683",
|
||||
"base/5/2832",
|
||||
"base/5/13500_vm",
|
||||
"base/5/2679",
|
||||
"base/5/2608_vm",
|
||||
"base/5/2673",
|
||||
"base/5/2690",
|
||||
"base/5/2336",
|
||||
"base/5/2754",
|
||||
"base/5/2701",
|
||||
"base/5/4168",
|
||||
"base/5/2650",
|
||||
"base/5/2839",
|
||||
"base/5/2688",
|
||||
"base/5/2840",
|
||||
"base/5/1247_fsm",
|
||||
"base/5/3997",
|
||||
"base/5/3456_vm",
|
||||
"base/5/2667",
|
||||
"base/5/2678",
|
||||
"base/5/2696",
|
||||
"base/5/3456",
|
||||
"base/5/2228",
|
||||
"base/5/1259_fsm",
|
||||
"base/5/6106",
|
||||
"base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_db_data/_data",
|
||||
"target": "/var/lib/postgresql/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "dawarich-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7.4-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-dawarich_dawarich_redis",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_redis/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "dawarich-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
},
|
||||
{
|
||||
"diff_added": 4475,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"var"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4479,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "freikin/dawarich:1.15.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 646,
|
||||
"name": "volgate-dawarich_dawarich_public",
|
||||
"sample": [
|
||||
"400.html",
|
||||
"icon.svg",
|
||||
"site.webmanifest",
|
||||
"favicon.ico",
|
||||
"404.html",
|
||||
"apple-touch-icon-precomposed.png",
|
||||
"apple-touch-icon.png",
|
||||
"406-unsupported-browser.html",
|
||||
"icon-512.png",
|
||||
"422.html",
|
||||
"500.html",
|
||||
"icon-192-maskable.png",
|
||||
"icon-512-maskable.png",
|
||||
"robots.txt",
|
||||
"icon-192.png",
|
||||
"icon.png",
|
||||
".well-known/assetlinks.json",
|
||||
".well-known/apple-app-site-association",
|
||||
"assets/turbo.min-b86d83036ff04169e5bf3ebbc82e0ad528456259e47091b448f41a3cadabdb40.js.gz",
|
||||
"assets/achievements-de86cbccec6f7fcb81e35bc8c035982f0192a543534d9d29486cd2d9cd383504.css",
|
||||
"assets/application-0a04ba66afa1fa29d9079d22048b5ff5a211f1b597cc569f315784b4f21e68d6.css.gz",
|
||||
"assets/application-6739e9e5befc5afb1c8035d71ddc83acb274c0ccb24a6171c1e27cc5aeb57e11.js.gz",
|
||||
"assets/maps_maplibre_panel-2143bca483b257f4798b58d75803ede7d622e4479c4e0e1b7b02bb8347f65d9a.css.gz",
|
||||
"assets/Inter-roman.latin-ext.var-46bc23ba7e33ea447579cd95b95f34665d7560377065b72f3a77df8bca4b0e5c.woff2",
|
||||
"assets/Inter-italic.latin-ext.var-802705fb8496b82eda3f410c7e70a35c9407ba98b97cc5d9754db82750466fad.woff2",
|
||||
"assets/trix-27b67936197943926cb14d19903e2a81f4ed2cb745aec0e8f198e70ddf292774.css",
|
||||
"assets/posthog-e801a7c556e92fcb63d04dd9296eca08930ce3eb785518770ed3f60b84e62b02.js",
|
||||
"assets/actiontext-7c6127c5682cea9debf5454351dae886079b68330ba4f5299bd31d4de53a761b.css",
|
||||
"assets/mp4-muxer-3395e507185a33132f10b664d1c577e8593fec15d75b952e629d828f9b684ae4.js.gz",
|
||||
"assets/Inter-roman.cyrillic.var-8aa524d3da3b8fd4a03ff2d0d41ea50520113fb2e8ae57c15079dabea44b3529.woff2",
|
||||
"assets/activestorage.esm-3f2e9c040e7870f701a98bbbb1c77c979bbbdab80af967b59174f14d9388a0c1.js",
|
||||
"assets/turbo.min.js-c6732dc7c1683ff78fbfb710f7dda227e58db136b253b8d07628207a5ccdb6b7.map.gz",
|
||||
"assets/activestorage-540a3fb0ba30935e8ef6a0c69d58dec4561a97dcfd297908db089c4d725bb22a.js.gz",
|
||||
"assets/application.tailwind-b198a91fdd7f7b90dc81a8108870b999692bb21890338a4cc47bc0c129280624.css",
|
||||
"assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js",
|
||||
"assets/brand_fonts-3cf2ea412ef4dfc5717c1bd2357c4f10cfcb0cfa8f2df789bad54925d8ac4d36.css",
|
||||
"assets/logo-e019d04aed76f3c68a9289e687cc788067b9c0a283949e7cac9a6ba6aef8b2fc.svg.gz",
|
||||
"assets/Inter-roman.alternates.var-29781a209d7978155bf343eb1653779269965fa4a43d504b1fb361ab20e8487b.woff2",
|
||||
"assets/favicon-2e5b300516831fcc0f9b76243d556ca802455bb2764cf158b36ecf3c69147ca8.jpeg",
|
||||
"assets/manifest-597b5199768f5efff6ec880a4180aec95099b04608cc46e56dfe4e0940ee4665.js"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_public/_data",
|
||||
"target": "/var/app/public",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-dawarich_dawarich_watched",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_watched/_data",
|
||||
"target": "/var/app/tmp/imports/watched",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-dawarich_dawarich_storage",
|
||||
"sample": [
|
||||
".keep"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-dawarich_dawarich_storage/_data",
|
||||
"target": "/var/app/storage",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "dawarich-sidekiq",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"dawarich_db_data",
|
||||
"dawarich_public",
|
||||
"dawarich_redis",
|
||||
"dawarich_storage",
|
||||
"dawarich_watched"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_PASSWORD",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY_BASE",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 403",
|
||||
"172.27.0.4:3000/ -> 403",
|
||||
"fixture Dawarich: seed OK \u2014 dawarich: POST /api/v1/overland/batches http=201 (47.4056,19.1918 at 2026-09-10T13:50:00Z)"
|
||||
],
|
||||
"fixture": "fixture Dawarich: seed OK \u2014 dawarich: POST /api/v1/overland/batches http=201 (47.4056,19.1918 at 2026-09-10T13:50:00Z)",
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"dawarich-redis: declared volume /data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+223
@@ -0,0 +1,223 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "docmost",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 5,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"apps"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/apps",
|
||||
"files": [
|
||||
"client"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/apps/client",
|
||||
"files": [
|
||||
"dist"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"index-template.html"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/apps/client/dist",
|
||||
"files": [
|
||||
"index-template.html"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 11,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "docmost/docmost:0.96.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-docmost_docmost_storage",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-docmost_docmost_storage/_data",
|
||||
"target": "/app/data/storage",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "docmost",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:18-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1589,
|
||||
"name": "volgate-docmost_docmost_postgres_data",
|
||||
"sample": [
|
||||
"18/docker/pg_ident.conf",
|
||||
"18/docker/pg_hba.conf",
|
||||
"18/docker/postmaster.pid",
|
||||
"18/docker/postgresql.conf",
|
||||
"18/docker/PG_VERSION",
|
||||
"18/docker/postgresql.auto.conf",
|
||||
"18/docker/postmaster.opts",
|
||||
"18/docker/base/5/2612",
|
||||
"18/docker/base/5/1418",
|
||||
"18/docker/base/5/6117",
|
||||
"18/docker/base/5/13510_fsm",
|
||||
"18/docker/base/5/2655",
|
||||
"18/docker/base/5/3609",
|
||||
"18/docker/base/5/2662",
|
||||
"18/docker/base/5/2683",
|
||||
"18/docker/base/5/2832",
|
||||
"18/docker/base/5/2679",
|
||||
"18/docker/base/5/2608_vm",
|
||||
"18/docker/base/5/2673",
|
||||
"18/docker/base/5/2690",
|
||||
"18/docker/base/5/2336",
|
||||
"18/docker/base/5/2754",
|
||||
"18/docker/base/5/2701",
|
||||
"18/docker/base/5/4168",
|
||||
"18/docker/base/5/2650",
|
||||
"18/docker/base/5/2839",
|
||||
"18/docker/base/5/2688",
|
||||
"18/docker/base/5/2840",
|
||||
"18/docker/base/5/1247_fsm",
|
||||
"18/docker/base/5/3997",
|
||||
"18/docker/base/5/3456_vm",
|
||||
"18/docker/base/5/2667",
|
||||
"18/docker/base/5/2678",
|
||||
"18/docker/base/5/2696",
|
||||
"18/docker/base/5/3456",
|
||||
"18/docker/base/5/2228",
|
||||
"18/docker/base/5/1259_fsm",
|
||||
"18/docker/base/5/6351",
|
||||
"18/docker/base/5/6106",
|
||||
"18/docker/base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-docmost_docmost_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "docmost-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-docmost_docmost_redis_data",
|
||||
"sample": [
|
||||
"appendonlydir/appendonly.aof.1.incr.aof",
|
||||
"appendonlydir/appendonly.aof.manifest",
|
||||
"appendonlydir/appendonly.aof.1.base.rdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-docmost_docmost_redis_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "docmost-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"docmost_postgres_data",
|
||||
"docmost_redis_data",
|
||||
"docmost_storage"
|
||||
],
|
||||
"env_keys": [
|
||||
"APP_SECRET",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 200",
|
||||
"172.28.0.4:3000/ -> 200",
|
||||
"fixture Docmost: seed OK \u2014 docmost: /api/auth/setup http=200 rc=0"
|
||||
],
|
||||
"fixture": "fixture Docmost: seed OK \u2014 docmost: /api/auth/setup http=200 rc=0",
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"docmost: declared volume /app/data/storage is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"docmost: this container's mounts are all empty while it created entries in ['/app/apps/client/dist'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "emby",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 205,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"media",
|
||||
"config"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"media",
|
||||
"config"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 207,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "emby/embyserver:4.11.0.4",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 3,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"books/metadata.db-wal",
|
||||
"books/metadata.db",
|
||||
"books/metadata.db-shm"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media",
|
||||
"target": "/media",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 46,
|
||||
"name": "volgate-emby_emby_config",
|
||||
"sample": [
|
||||
"logs/hardware_detection-63926547843.txt",
|
||||
"logs/readme.txt",
|
||||
"logs/embyserver.txt",
|
||||
"plugins/Emby.Dlna.dll",
|
||||
"plugins/NfoMetadata.dll",
|
||||
"plugins/OpenSubtitles.dll",
|
||||
"plugins/Emby.XmlTV.dll",
|
||||
"plugins/StudioImages.dll",
|
||||
"plugins/Emby.Webhooks.dll",
|
||||
"plugins/MBBackup.dll",
|
||||
"plugins/Fanart.dll",
|
||||
"plugins/Emby.Server.CinemaMode.dll",
|
||||
"plugins/BlurayMounter.dll",
|
||||
"plugins/Emby.M3UTuner.dll",
|
||||
"plugins/DvdMounter.dll",
|
||||
"plugins/OMDb.dll",
|
||||
"plugins/MusicBrainz.dll",
|
||||
"plugins/Emby.PortMapper.dll",
|
||||
"plugins/AudioDb.dll",
|
||||
"plugins/EmbyGuideData.dll",
|
||||
"plugins/Tvdb.dll",
|
||||
"plugins/MovieDb.dll",
|
||||
"config/system.xml",
|
||||
"config/users/adf1dbe640d3417fa792f025e60b6b44/policy.xml",
|
||||
"cache/httpclient/0fb243ded9649ae6d18059c674a4ae00_1",
|
||||
"cache/ffmpeg/hwaccels_4.11.0.4.txt",
|
||||
"cache/ffmpeg/filters_4.11.0.4.txt",
|
||||
"cache/ffmpeg/decoders_4.11.0.4.txt",
|
||||
"cache/ffmpeg/version_4.11.0.4.txt",
|
||||
"cache/ffmpeg/encoders_4.11.0.4.txt",
|
||||
"cache/ffmpeg/protocols_4.11.0.4.txt",
|
||||
"data/activitylog.db",
|
||||
"data/lastversion.txt",
|
||||
"data/library.db",
|
||||
"data/library.db-wal",
|
||||
"data/device.txt",
|
||||
"data/activitylog.db-shm",
|
||||
"data/authentication.db-wal",
|
||||
"data/activitylog.db-wal",
|
||||
"data/wan.dat"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-emby_emby_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "emby",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"emby_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8096/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8096
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "ghost",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "ghost:6.67.0-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 7,
|
||||
"name": "volgate-ghost_ghost_content",
|
||||
"sample": [
|
||||
"logs/https___blog_gate_invalid_production.error.log",
|
||||
"logs/https___blog_gate_invalid_production.log",
|
||||
"themes/source",
|
||||
"themes/casper",
|
||||
"public/.well-known/recommendations.json",
|
||||
"public/admin-auth/index.html",
|
||||
"data/ghost.db"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-ghost_ghost_content/_data",
|
||||
"target": "/var/lib/ghost/content",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "ghost",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"ghost_content"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:2368/ -> 301"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
2368
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "gitea",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 16,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data"
|
||||
],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"gitea"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/gitea",
|
||||
"files": [
|
||||
"gitea"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"s6",
|
||||
"ssh"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6",
|
||||
"files": [
|
||||
".s6-svscan",
|
||||
"gitea",
|
||||
"openssh"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"control",
|
||||
"lock"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6/.s6-svscan",
|
||||
"files": [
|
||||
"control",
|
||||
"lock"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"event",
|
||||
"supervise"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6/gitea",
|
||||
"files": [
|
||||
"event",
|
||||
"supervise"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"control",
|
||||
"death_tally",
|
||||
"lock",
|
||||
"status"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6/gitea/supervise",
|
||||
"files": [
|
||||
"control",
|
||||
"death_tally",
|
||||
"lock",
|
||||
"status"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"supervise",
|
||||
"event"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6/openssh",
|
||||
"files": [
|
||||
"supervise",
|
||||
"event"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"control",
|
||||
"death_tally",
|
||||
"lock",
|
||||
"status"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6/openssh/supervise",
|
||||
"files": [
|
||||
"control",
|
||||
"death_tally",
|
||||
"lock",
|
||||
"status"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/ssh",
|
||||
"files": [
|
||||
"sshd_config"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 27,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "gitea/gitea:1.27.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 8,
|
||||
"name": "volgate-gitea_gitea_data",
|
||||
"sample": [
|
||||
"gitea/conf/app.ini",
|
||||
"git/.ssh/environment",
|
||||
"ssh/ssh_host_rsa_key.pub",
|
||||
"ssh/ssh_host_rsa_key",
|
||||
"ssh/ssh_host_ed25519_key",
|
||||
"ssh/ssh_host_ecdsa_key.pub",
|
||||
"ssh/ssh_host_ed25519_key.pub",
|
||||
"ssh/ssh_host_ecdsa_key"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-gitea_gitea_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "gitea",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"gitea_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "glance",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 1,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"config"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"config"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 2,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "glanceapp/glance:v0.8.5",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-glance_glance_config",
|
||||
"sample": [
|
||||
"glance.yml"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-glance_glance_config/_data",
|
||||
"target": "/app/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "glance",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"glance_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8080/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8080
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "gokapi",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"config",
|
||||
"data"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"config",
|
||||
"data"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 3,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "f0rc3/gokapi:v1.9.6",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 4,
|
||||
"name": "volgate-gokapi_gokapi_data",
|
||||
"sample": [
|
||||
"gokapi.sqlite-wal",
|
||||
"gokapi.sqlite",
|
||||
"log.txt",
|
||||
"gokapi.sqlite-shm"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-gokapi_gokapi_data/_data",
|
||||
"target": "/app/data",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-gokapi_gokapi_config",
|
||||
"sample": [
|
||||
"config.json"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-gokapi_gokapi_config/_data",
|
||||
"target": "/app/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "gokapi",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"gokapi_config",
|
||||
"gokapi_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"GOKAPI_PASSWORD",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:53842/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
53842
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "grafana",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 13,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"usr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"share"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 28,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "grafana/grafana:13.2.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 939,
|
||||
"name": "volgate-grafana_grafana_data",
|
||||
"sample": [
|
||||
"grafana.db",
|
||||
"plugins/grafana-lokiexplore-app/963.js.map",
|
||||
"plugins/grafana-lokiexplore-app/8067.js.map",
|
||||
"plugins/grafana-lokiexplore-app/3069.js",
|
||||
"plugins/grafana-lokiexplore-app/5281.js",
|
||||
"plugins/grafana-lokiexplore-app/8077.js.map",
|
||||
"plugins/grafana-lokiexplore-app/3803.js",
|
||||
"plugins/grafana-lokiexplore-app/2531.js",
|
||||
"plugins/grafana-lokiexplore-app/1949.js",
|
||||
"plugins/grafana-lokiexplore-app/8990.js",
|
||||
"plugins/grafana-lokiexplore-app/6842.js",
|
||||
"plugins/grafana-lokiexplore-app/9436.js.map",
|
||||
"plugins/grafana-lokiexplore-app/6178.js",
|
||||
"plugins/grafana-lokiexplore-app/4623.js",
|
||||
"plugins/grafana-lokiexplore-app/3252.js.map",
|
||||
"plugins/grafana-lokiexplore-app/75.js.map",
|
||||
"plugins/grafana-lokiexplore-app/7409.js",
|
||||
"plugins/grafana-lokiexplore-app/4803.js.map",
|
||||
"plugins/grafana-lokiexplore-app/821.js",
|
||||
"plugins/grafana-lokiexplore-app/8438.js.map",
|
||||
"plugins/grafana-lokiexplore-app/2250.js",
|
||||
"plugins/grafana-lokiexplore-app/3508.js",
|
||||
"plugins/grafana-lokiexplore-app/4803.js",
|
||||
"plugins/grafana-lokiexplore-app/087755a1246f96c42579.svg",
|
||||
"plugins/grafana-lokiexplore-app/2729.js",
|
||||
"plugins/grafana-lokiexplore-app/9859.js.map",
|
||||
"plugins/grafana-lokiexplore-app/module.js",
|
||||
"plugins/grafana-lokiexplore-app/3960.js",
|
||||
"plugins/grafana-lokiexplore-app/LICENSE.txt",
|
||||
"plugins/grafana-lokiexplore-app/9701.js",
|
||||
"plugins/grafana-lokiexplore-app/8389.js",
|
||||
"plugins/grafana-lokiexplore-app/7409.js.map",
|
||||
"plugins/grafana-lokiexplore-app/4582.js.map",
|
||||
"plugins/grafana-lokiexplore-app/9793.js.map",
|
||||
"plugins/grafana-lokiexplore-app/8627.js.map",
|
||||
"plugins/grafana-lokiexplore-app/8627.js",
|
||||
"plugins/grafana-lokiexplore-app/7557.js",
|
||||
"plugins/grafana-lokiexplore-app/5888.js.map",
|
||||
"plugins/grafana-lokiexplore-app/85b746ba2cec564b9a89.svg",
|
||||
"plugins/grafana-lokiexplore-app/8751.js.map"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-grafana_grafana_data/_data",
|
||||
"target": "/var/lib/grafana",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "grafana",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 472
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"grafana_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"GF_SECURITY_ADMIN_PASSWORD",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+260
@@ -0,0 +1,260 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "gramps-web",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 121,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"root",
|
||||
"usr",
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"secret"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"secret"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/app/src",
|
||||
"files": [
|
||||
"gramps_webapi",
|
||||
"alembic_users"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/src/alembic_users",
|
||||
"files": [
|
||||
"versions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/app/src/gramps_webapi",
|
||||
"files": [
|
||||
"auth",
|
||||
"util",
|
||||
"api"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/app/src/gramps_webapi/api",
|
||||
"files": [
|
||||
"search",
|
||||
"resources"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".gramps"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".gramps"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"grampsdb"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.gramps",
|
||||
"files": [
|
||||
"grampsdb"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/root/gramps",
|
||||
"files": [
|
||||
"gramps60"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/root/gramps/gramps60",
|
||||
"files": [
|
||||
"plugins"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/root/gramps/gramps60/plugins",
|
||||
"files": [
|
||||
"FilterRules"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"lib"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 143,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/gramps-project/grampsweb:v25.6.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-grampsweb_gramps_cache",
|
||||
"sample": [
|
||||
"request_cache/2029240f6d1128be89ddc32729463129"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_cache/_data",
|
||||
"target": "/app/cache",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-grampsweb_gramps_secret",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_secret/_data",
|
||||
"target": "/app/secret",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-grampsweb_gramps_tmp",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_tmp/_data",
|
||||
"target": "/tmp",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-grampsweb_gramps_users",
|
||||
"sample": [
|
||||
"users.sqlite"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_users/_data",
|
||||
"target": "/app/users",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2,
|
||||
"name": "volgate-grampsweb_gramps_db",
|
||||
"sample": [
|
||||
"a6bc6a5b-8996-4df6-aded-8af86d23f81a/name.txt",
|
||||
"a6bc6a5b-8996-4df6-aded-8af86d23f81a/database.txt"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_db/_data",
|
||||
"target": "/root/.gramps/grampsdb",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-grampsweb_gramps_index",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_index/_data",
|
||||
"target": "/app/indexdir",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-grampsweb_gramps_media",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_media/_data",
|
||||
"target": "/app/media",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-grampsweb_gramps_thumb_cache",
|
||||
"sample": [
|
||||
"2029240f6d1128be89ddc32729463129"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-grampsweb_gramps_thumb_cache/_data",
|
||||
"target": "/app/thumbnail_cache",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "gramps-web",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"gramps_cache",
|
||||
"gramps_db",
|
||||
"gramps_index",
|
||||
"gramps_media",
|
||||
"gramps_secret",
|
||||
"gramps_thumb_cache",
|
||||
"gramps_tmp",
|
||||
"gramps_users"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"GRAMPSWEB_SECRET_KEY",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"fixture GrampsWeb: seed OK \u2014 gramps-web: seeded user drill1c00babf"
|
||||
],
|
||||
"fixture": "fixture GrampsWeb: seed OK \u2014 gramps-web: seeded user drill1c00babf",
|
||||
"ports": [
|
||||
5000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"gramps-web: declared volume /app/secret is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"gramps-web: declared volume /app/indexdir is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"gramps-web: declared volume /app/media is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+206
@@ -0,0 +1,206 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "grimmory",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 17,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"books"
|
||||
],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"books"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"data"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"group-",
|
||||
"passwd-",
|
||||
"shadow-"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"group-",
|
||||
"passwd-",
|
||||
"shadow-"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"booklore"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/home",
|
||||
"files": [
|
||||
"booklore"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 24,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/grimmory-tools/grimmory:v3.5.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/appdata/grimmory/data",
|
||||
"target": "/app/data",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/grimmory",
|
||||
"target": "/books",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/import/grimmory",
|
||||
"target": "/bookdrop",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "grimmory",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "mariadb:11.4",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 355,
|
||||
"name": "volgate-grimmory_grimmory_db",
|
||||
"sample": [
|
||||
"tc.log",
|
||||
".my-healthcheck.cnf",
|
||||
"aria_log.00000001",
|
||||
"aria_log_control",
|
||||
"undo001",
|
||||
"ibtmp1",
|
||||
"ib_buffer_pool",
|
||||
"ibdata1",
|
||||
"undo002",
|
||||
"multi-master.info",
|
||||
"mariadb_upgrade_info",
|
||||
"ddl_recovery.log",
|
||||
"ib_logfile0",
|
||||
"undo003",
|
||||
"performance_schema/db.opt",
|
||||
"mysql/func.frm",
|
||||
"mysql/index_stats.MAD",
|
||||
"mysql/transaction_registry.ibd",
|
||||
"mysql/time_zone_transition_type.frm",
|
||||
"mysql/global_priv.MAD",
|
||||
"mysql/time_zone_leap_second.MAI",
|
||||
"mysql/column_stats.MAD",
|
||||
"mysql/time_zone_transition.MAI",
|
||||
"mysql/plugin.MAD",
|
||||
"mysql/time_zone.MAD",
|
||||
"mysql/column_stats.frm",
|
||||
"mysql/db.MAD",
|
||||
"mysql/help_keyword.frm",
|
||||
"mysql/help_relation.frm",
|
||||
"mysql/procs_priv.MAI",
|
||||
"mysql/servers.frm",
|
||||
"mysql/innodb_index_stats.frm",
|
||||
"mysql/roles_mapping.frm",
|
||||
"mysql/plugin.MAI",
|
||||
"mysql/time_zone_name.MAD",
|
||||
"mysql/user.frm",
|
||||
"mysql/time_zone.MAI",
|
||||
"mysql/global_priv.frm",
|
||||
"mysql/proxies_priv.MAI",
|
||||
"mysql/time_zone_transition_type.MAI"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-grimmory_grimmory_db/_data",
|
||||
"target": "/var/lib/mysql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "grimmory-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"grimmory_db"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DB_ROOT_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:6060/ -> 200",
|
||||
"172.31.0.3:6060/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
6060
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"grimmory: this container's mounts are all empty while it created entries in ['/', '/app', '/etc'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "home-assistant",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2308,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"usr",
|
||||
"root",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".config"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".config"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local",
|
||||
"files": [
|
||||
"lib"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 2600,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/home-assistant/home-assistant:2026.9.4",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 22,
|
||||
"name": "volgate-homeassistant_homeassistant_config",
|
||||
"sample": [
|
||||
"home-assistant_v2.db-shm",
|
||||
"home-assistant_v2.db-wal",
|
||||
"home-assistant_v2.db",
|
||||
"configuration.yaml",
|
||||
".ha_run.lock",
|
||||
"home-assistant.log.1",
|
||||
"home-assistant.log.fault",
|
||||
"home-assistant.log",
|
||||
".HA_VERSION",
|
||||
".storage/core.uuid",
|
||||
".storage/core.restore_state",
|
||||
".storage/core.entity_registry",
|
||||
".storage/http.auth",
|
||||
".storage/core.device_registry",
|
||||
".storage/http",
|
||||
".storage/auth",
|
||||
".storage/core.config_entries",
|
||||
".storage/homeassistant.exposed_entities",
|
||||
".storage/assist_pipeline.pipelines",
|
||||
"blueprints/script/homeassistant/confirmable_notification.yaml",
|
||||
"blueprints/automation/homeassistant/notify_leaving_zone.yaml",
|
||||
"blueprints/automation/homeassistant/motion_light.yaml"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-homeassistant_homeassistant_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "home-assistant",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"homeassistant_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8123/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8123
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "homebox",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 1,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 1,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/sysadminsmedia/homebox:0.26.2",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-homebox_homebox_data",
|
||||
"sample": [
|
||||
"homebox.db",
|
||||
"homebox.db-shm",
|
||||
"homebox.db-wal"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-homebox_homebox_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "homebox",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"homebox_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HBOX_AUTH_API_KEY_PEPPER",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:7745/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
7745
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "homepage",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"config"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"config"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/gethomepage/homepage:v1.13.2",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": -1,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/var/run/docker.sock",
|
||||
"target": "/var/run/docker.sock",
|
||||
"writable_by_app": "no-source"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-homepage_homepage_config",
|
||||
"sample": [
|
||||
"kubernetes.yaml",
|
||||
"settings.yaml",
|
||||
"logs/homepage.log"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-homepage_homepage_config/_data",
|
||||
"target": "/app/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "homepage",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"homepage_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,314 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "immich",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 1,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"cache"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"cache"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 1,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/immich-app/immich-machine-learning:v3.2.4",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-immich_immich_ml_cache",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-immich_immich_ml_cache/_data",
|
||||
"target": "/cache",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "immich-machine-learning",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 3,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run",
|
||||
"etc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"postgresql"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"postgresql.conf"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/postgresql",
|
||||
"files": [
|
||||
"postgresql.conf"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 7,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1879,
|
||||
"name": "volgate-immich_immich_postgres_data",
|
||||
"sample": [
|
||||
"pg_ident.conf",
|
||||
"pg_hba.conf",
|
||||
"postmaster.pid",
|
||||
"postgresql.conf",
|
||||
"PG_VERSION",
|
||||
"postgresql.auto.conf",
|
||||
"postmaster.opts",
|
||||
"base/5/13401_fsm",
|
||||
"base/5/2612",
|
||||
"base/5/13410",
|
||||
"base/5/1418",
|
||||
"base/5/6117",
|
||||
"base/5/2655",
|
||||
"base/5/13406_fsm",
|
||||
"base/5/3609",
|
||||
"base/5/2662",
|
||||
"base/5/2683",
|
||||
"base/5/2832",
|
||||
"base/5/2679",
|
||||
"base/5/2608_vm",
|
||||
"base/5/2673",
|
||||
"base/5/2690",
|
||||
"base/5/2336",
|
||||
"base/5/2754",
|
||||
"base/5/2701",
|
||||
"base/5/4168",
|
||||
"base/5/2650",
|
||||
"base/5/2839",
|
||||
"base/5/2688",
|
||||
"base/5/13401_vm",
|
||||
"base/5/2840",
|
||||
"base/5/1247_fsm",
|
||||
"base/5/3997",
|
||||
"base/5/3456_vm",
|
||||
"base/5/2667",
|
||||
"base/5/2678",
|
||||
"base/5/2696",
|
||||
"base/5/3456",
|
||||
"base/5/2228",
|
||||
"base/5/1259_fsm"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-immich_immich_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "immich-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-immich_immich_redis_data",
|
||||
"sample": [
|
||||
"appendonlydir/appendonly.aof.1.incr.aof",
|
||||
"appendonlydir/appendonly.aof.manifest",
|
||||
"appendonlydir/appendonly.aof.1.base.rdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-immich_immich_redis_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "immich-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
},
|
||||
{
|
||||
"diff_added": 4,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data",
|
||||
"external"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data",
|
||||
"external"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"photos"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/external",
|
||||
"files": [
|
||||
"photos"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"src"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/src",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"upload"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/src/app",
|
||||
"files": [
|
||||
"upload"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 7,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/immich-app/immich-server:v3.2.4",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 6,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"upload/.immich",
|
||||
"backups/.immich",
|
||||
"library/.immich",
|
||||
"profile/.immich",
|
||||
"encoded-video/.immich",
|
||||
"thumbs/.immich"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/appdata/immich",
|
||||
"target": "/usr/src/app/upload",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/photos",
|
||||
"target": "/external/photos",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "anonymous",
|
||||
"files": 0,
|
||||
"name": "711f413018201c75e07a40945663b7efbf2fb99d957942f85d36d6f1ee9f2bc7",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/711f413018201c75e07a40945663b7efbf2fb99d957942f85d36d6f1ee9f2bc7/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "immich-server",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"immich_ml_cache",
|
||||
"immich_postgres_data",
|
||||
"immich_redis_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:2283/ -> 200",
|
||||
"192.168.48.5:2283/ -> 200",
|
||||
"fixture Immich: seed OK \u2014 immich: seeded album drillalbuma6820f47"
|
||||
],
|
||||
"fixture": "fixture Immich: seed OK \u2014 immich: seeded album drillalbuma6820f47",
|
||||
"ports": [
|
||||
2283
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"immich-machine-learning: declared volume /cache is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"immich-machine-learning: this container's mounts are all empty while it created entries in ['/'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "jellyfin",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 7,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"root",
|
||||
"jellyfin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"Dictionaries"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/jellyfin",
|
||||
"files": [
|
||||
"Dictionaries"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".aspnet"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".aspnet"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"DataProtection-Keys"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.aspnet",
|
||||
"files": [
|
||||
"DataProtection-Keys"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"key-007ed6d3-8630-4eee-8875-b3a09c521ea0.xml"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.aspnet/DataProtection-Keys",
|
||||
"files": [
|
||||
"key-007ed6d3-8630-4eee-8875-b3a09c521ea0.xml"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 10,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "jellyfin/jellyfin:10.11.11",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 3,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"books/metadata.db-wal",
|
||||
"books/metadata.db",
|
||||
"books/metadata.db-shm"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media",
|
||||
"target": "/media",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 20,
|
||||
"name": "volgate-jellyfin_jellyfin_config",
|
||||
"sample": [
|
||||
".jellyfin-data",
|
||||
"plugins/.jellyfin-plugin",
|
||||
"plugins/configurations/Jellyfin.Plugin.MusicBrainz.xml",
|
||||
"plugins/configurations/Jellyfin.Plugin.Tmdb.xml",
|
||||
"config/database.xml",
|
||||
"config/system.xml",
|
||||
"config/.jellyfin-config",
|
||||
"config/encoding.xml",
|
||||
"config/logging.default.json",
|
||||
"root/.jellyfin-root",
|
||||
"log/log_20261002.log",
|
||||
"log/.jellyfin-log",
|
||||
"data/.jellyfin-data",
|
||||
"data/jellyfin.db",
|
||||
"data/jellyfin.db-wal",
|
||||
"data/device.txt",
|
||||
"data/jellyfin.db-shm",
|
||||
"data/ScheduledTasks/3a025083-141d-3c17-dd96-d5f9b951287b.js",
|
||||
"data/ScheduledTasks/f9b057c0-54e9-e6da-ee4a-88ffd146a403.js",
|
||||
"data/ScheduledTasks/7d8088c1-0902-f1bf-4072-ded42437bcfb.js"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-jellyfin_jellyfin_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2,
|
||||
"name": "volgate-jellyfin_jellyfin_cache",
|
||||
"sample": [
|
||||
".jellyfin-cache",
|
||||
"transcodes/.jellyfin-transcode"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-jellyfin_jellyfin_cache/_data",
|
||||
"target": "/cache",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "jellyfin",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"jellyfin_cache",
|
||||
"jellyfin_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8096/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8096
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "karakeep",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 203,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 205,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/karakeep-app/karakeep:0.33.2",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2,
|
||||
"name": "volgate-karakeep_karakeep_data",
|
||||
"sample": [
|
||||
"db.db",
|
||||
"queue.db"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-karakeep_karakeep_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "karakeep",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 1,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"usr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"sbin"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"docker-init"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/sbin",
|
||||
"files": [
|
||||
"docker-init"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 3,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 65534,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/karakeep-app/karakeep-chrome:151.0.7922.47-r1",
|
||||
"mounts": [],
|
||||
"name": "karakeep-chrome",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 65534
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "getmeili/meilisearch:v1.41.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 5,
|
||||
"name": "volgate-karakeep_karakeep_meili",
|
||||
"sample": [
|
||||
"data.ms/VERSION",
|
||||
"data.ms/tasks/lock.mdb",
|
||||
"data.ms/tasks/data.mdb",
|
||||
"data.ms/auth/lock.mdb",
|
||||
"data.ms/auth/data.mdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-karakeep_karakeep_meili/_data",
|
||||
"target": "/meili_data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "karakeep-meilisearch",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"karakeep_data",
|
||||
"karakeep_meili"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"MEILI_MASTER_KEY",
|
||||
"NEXTAUTH_SECRET",
|
||||
"OPENAI_API_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 307",
|
||||
"192.168.64.4:3000/ -> 307"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,266 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "kimai",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"opt",
|
||||
"run",
|
||||
"usr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/opt",
|
||||
"files": [
|
||||
"kimai"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".env.local"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/opt/kimai",
|
||||
"files": [
|
||||
".env.local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/opt/kimai/config",
|
||||
"files": [
|
||||
"packages"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/opt/kimai/config/packages",
|
||||
"files": [
|
||||
"monolog.yaml"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local",
|
||||
"files": [
|
||||
"etc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local/etc",
|
||||
"files": [
|
||||
"php"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local/etc/php",
|
||||
"files": [
|
||||
"php.ini"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 14,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "kimai/kimai2:2.67.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2038,
|
||||
"name": "volgate-kimai_kimai_var",
|
||||
"sample": [
|
||||
"installed",
|
||||
"plugins/.gitkeep",
|
||||
"cache/.gitkeep",
|
||||
"cache/prod/annotations.map",
|
||||
"cache/prod/webpack_encore.cache.php",
|
||||
"cache/prod/url_generating_routes.php",
|
||||
"cache/prod/url_matching_routes.php",
|
||||
"cache/prod/App_KernelProdContainer.preload.php",
|
||||
"cache/prod/url_generating_routes.php.meta",
|
||||
"cache/prod/App_KernelProdContainer.php",
|
||||
"cache/prod/url_matching_routes.php.meta",
|
||||
"cache/prod/serialization.php",
|
||||
"cache/prod/validation.php",
|
||||
"cache/prod/App_KernelProdContainer.php.meta",
|
||||
"cache/prod/App_KernelProdContainer.php.lock",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityProjectComment.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoiceTemplate.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomerMeta.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityTeamMember.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityTimesheet.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityConfiguration.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoice.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityRole.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityActivity.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityTag.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityRolePermission.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomerRate.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomer.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityTimesheetMeta.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityAccessToken.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoiceMeta.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityActivityMeta.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityProjectMeta.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityInvoiceTemplateMeta.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityProjectRate.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityTeam.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityBookmark.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityCustomerComment.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityExportTemplate.php",
|
||||
"cache/prod/doctrine/orm/Proxies/__CG__AppEntityProject.php"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-kimai_kimai_var/_data",
|
||||
"target": "/opt/kimai/var",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "kimai",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "mariadb:11.8",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 279,
|
||||
"name": "volgate-kimai_kimai_db_data",
|
||||
"sample": [
|
||||
"tc.log",
|
||||
".my-healthcheck.cnf",
|
||||
"aria_log.00000001",
|
||||
"aria_log_control",
|
||||
"undo001",
|
||||
"ibtmp1",
|
||||
"ib_buffer_pool",
|
||||
"ibdata1",
|
||||
"undo002",
|
||||
"multi-master.info",
|
||||
"mariadb_upgrade_info",
|
||||
"ddl_recovery.log",
|
||||
"ib_logfile0",
|
||||
"undo003",
|
||||
"performance_schema/db.opt",
|
||||
"mysql/func.frm",
|
||||
"mysql/index_stats.MAD",
|
||||
"mysql/transaction_registry.ibd",
|
||||
"mysql/time_zone_transition_type.frm",
|
||||
"mysql/global_priv.MAD",
|
||||
"mysql/time_zone_leap_second.MAI",
|
||||
"mysql/column_stats.MAD",
|
||||
"mysql/time_zone_transition.MAI",
|
||||
"mysql/plugin.MAD",
|
||||
"mysql/time_zone.MAD",
|
||||
"mysql/column_stats.frm",
|
||||
"mysql/db.MAD",
|
||||
"mysql/help_keyword.frm",
|
||||
"mysql/help_relation.frm",
|
||||
"mysql/procs_priv.MAI",
|
||||
"mysql/servers.frm",
|
||||
"mysql/innodb_index_stats.frm",
|
||||
"mysql/roles_mapping.frm",
|
||||
"mysql/plugin.MAI",
|
||||
"mysql/time_zone_name.MAD",
|
||||
"mysql/user.frm",
|
||||
"mysql/time_zone.MAI",
|
||||
"mysql/global_priv.frm",
|
||||
"mysql/proxies_priv.MAI",
|
||||
"mysql/time_zone_transition_type.MAI"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-kimai_kimai_db_data/_data",
|
||||
"target": "/var/lib/mysql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "kimai-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"kimai_db_data",
|
||||
"kimai_var"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_EMAIL",
|
||||
"ADMIN_PASSWORD",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8001/ -> 302",
|
||||
"192.168.80.3:8001/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8001
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "komga",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 12,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data",
|
||||
"config"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data",
|
||||
"config"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 13,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "gotson/komga:1.28.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/comics",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 11,
|
||||
"name": "volgate-komga_komga_config",
|
||||
"sample": [
|
||||
"database.sqlite",
|
||||
"tasks.sqlite-wal",
|
||||
"database.sqlite-shm",
|
||||
"tasks.sqlite",
|
||||
"database.sqlite-wal",
|
||||
"tasks.sqlite-shm",
|
||||
"logs/komga.log",
|
||||
"lucene/_0.si",
|
||||
"lucene/_0.cfs",
|
||||
"lucene/segments_1",
|
||||
"lucene/_0.cfe"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-komga_komga_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "komga",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"komga_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:25600/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
25600
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "mealie",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 1,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app",
|
||||
"etc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"data"
|
||||
],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"passwd-",
|
||||
"group-"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 10,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/mealie-recipes/mealie:v3.28.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 5,
|
||||
"name": "volgate-mealie_mealie_data",
|
||||
"sample": [
|
||||
".secret",
|
||||
".session_secret",
|
||||
"mealie.log",
|
||||
"mealie.db",
|
||||
"users/aeacef6a-b1ac-4b48-9cfd-94d9a92df832/profile.webp"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-mealie_mealie_data/_data",
|
||||
"target": "/app/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "mealie",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"mealie_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:9000/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
9000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "metube",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 13,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"downloads",
|
||||
"state"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"downloads",
|
||||
"state"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 5,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"pyproject.toml",
|
||||
"ui",
|
||||
"uv.lock",
|
||||
"app",
|
||||
"docker-entrypoint.sh"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 9,
|
||||
"db_signature": false,
|
||||
"dir": "/app/app",
|
||||
"files": [
|
||||
"dl_formats.py",
|
||||
"main.py",
|
||||
"music_metadata.py",
|
||||
"state_store.py",
|
||||
"subscriptions.py",
|
||||
"tests",
|
||||
"ytdl.py",
|
||||
"bg_tasks.py",
|
||||
"url_guard.py"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 14,
|
||||
"db_signature": false,
|
||||
"dir": "/app/app/tests",
|
||||
"files": [
|
||||
"test_persistent_queue.py",
|
||||
"test_state_store.py",
|
||||
"test_ytdl_utils.py",
|
||||
"conftest.py",
|
||||
"test_api.py",
|
||||
"test_dl_formats.py",
|
||||
"test_download_queue.py",
|
||||
"test_main_helpers.py",
|
||||
"test_nightly_update.py",
|
||||
"test_subscriptions.py",
|
||||
"test_url_guard.py",
|
||||
"test_bg_tasks.py",
|
||||
"test_config.py",
|
||||
"test_music_metadata.py"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/ui",
|
||||
"files": [
|
||||
"dist"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/ui/dist",
|
||||
"files": [
|
||||
"metube"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/app/ui/dist/metube",
|
||||
"files": [
|
||||
"3rdpartylicenses.txt",
|
||||
"browser"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 12,
|
||||
"db_signature": false,
|
||||
"dir": "/app/ui/dist/metube/browser",
|
||||
"files": [
|
||||
"manifest.webmanifest",
|
||||
"ngsw.json",
|
||||
"safety-worker.js",
|
||||
"styles-GJAVEZGM.css",
|
||||
"favicon.ico",
|
||||
"index.html",
|
||||
"main-CXU5VOAO.js",
|
||||
"ngsw-worker.js",
|
||||
"polyfills-DB62ZRJ7.js",
|
||||
"worker-basic.min.js",
|
||||
"assets",
|
||||
"custom-service-worker.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/ui/dist/metube/browser/assets",
|
||||
"files": [
|
||||
"icons"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 9,
|
||||
"db_signature": false,
|
||||
"dir": "/app/ui/dist/metube/browser/assets/icons",
|
||||
"files": [
|
||||
"apple-touch-icon.png",
|
||||
"browserconfig.xml",
|
||||
"android-chrome-192x192.png",
|
||||
"android-chrome-384x384.png",
|
||||
"favicon-16x16.png",
|
||||
"favicon-32x32.png",
|
||||
"favicon.ico",
|
||||
"mstile-150x150.png",
|
||||
"safari-pinned-tab.svg"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 69,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/alexta69/metube:2026.09.29",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 1,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"Big_Buck_Bunny_360_10s_1MB.mp4"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/metube",
|
||||
"target": "/downloads",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2,
|
||||
"name": "volgate-metube_metube_state",
|
||||
"sample": [
|
||||
"completed.json",
|
||||
"queue.json"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-metube_metube_state/_data",
|
||||
"target": "/state",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "metube",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"metube_state"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8081/ -> 200",
|
||||
"172.18.0.2:8081/ -> 200",
|
||||
"172.18.0.2:8081/login -> 404",
|
||||
"172.18.0.2:8081/setup -> 404",
|
||||
"172.18.0.2:8081/signup -> 404",
|
||||
"172.18.0.2:8081/register -> 404",
|
||||
"172.18.0.2:8081/install -> 404",
|
||||
"172.18.0.2:8081/admin -> 404",
|
||||
"172.18.0.2:8081/api/health -> 404",
|
||||
"172.18.0.2:8081/health -> 404",
|
||||
"172.18.0.2:8081/healthz -> 404",
|
||||
"172.18.0.2:8081/status -> 404",
|
||||
"172.18.0.2:8081/web -> 404",
|
||||
"172.18.0.2:8081/index.php -> 404",
|
||||
"172.18.0.2:8081/dashboard -> 404",
|
||||
"fixture MeTube: seed OK \u2014 metube: the download finished (991017 bytes)"
|
||||
],
|
||||
"fixture": "fixture MeTube: seed OK \u2014 metube: the download finished (991017 bytes)",
|
||||
"ports": [
|
||||
8081
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "n8n",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 503,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"home"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/home",
|
||||
"files": [
|
||||
"node"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 506,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "n8nio/n8n:2.42.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 7,
|
||||
"name": "volgate-n8n_n8n_data",
|
||||
"sample": [
|
||||
"crash.journal",
|
||||
"database.sqlite",
|
||||
"config",
|
||||
"database.sqlite-shm",
|
||||
"n8nEventLog.log",
|
||||
"database.sqlite-wal",
|
||||
"nodes/package.json"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-n8n_n8n_data/_data",
|
||||
"target": "/home/node/.n8n",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "n8n",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"n8n_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"N8N_ENCRYPTION_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:5678/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
5678
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "navidrome",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data",
|
||||
"music"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data",
|
||||
"music"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 2,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "deluan/navidrome:0.64.2",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/music",
|
||||
"target": "/music",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 6,
|
||||
"name": "volgate-navidrome_navidrome_data",
|
||||
"sample": [
|
||||
"navidrome.db-shm",
|
||||
"navidrome.db",
|
||||
"navidrome.db-wal",
|
||||
"cache/images/.nd-migrated",
|
||||
"cache/backgrounds/.nd-migrated",
|
||||
"cache/transcoding/.nd-migrated"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-navidrome_navidrome_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "navidrome",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"navidrome_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:4533/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
4533
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+322
@@ -0,0 +1,322 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "nextcloud",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 4,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run",
|
||||
"usr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local",
|
||||
"files": [
|
||||
"etc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local/etc",
|
||||
"files": [
|
||||
"php"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local/etc/php",
|
||||
"files": [
|
||||
"conf.d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"redis-session.ini"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local/etc/php/conf.d",
|
||||
"files": [
|
||||
"redis-session.ini"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 12,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "nextcloud:34.0.4-apache",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 4001,
|
||||
"name": "volgate-nextcloud_nextcloud_html",
|
||||
"sample": [
|
||||
"cron.php",
|
||||
"index.php",
|
||||
"index.html",
|
||||
"remote.php",
|
||||
"package.json",
|
||||
"console.php",
|
||||
"AUTHORS",
|
||||
"nextcloud-init-sync.lock",
|
||||
"composer.lock",
|
||||
"public.php",
|
||||
".user.ini",
|
||||
"version.php",
|
||||
"COPYING",
|
||||
".htaccess",
|
||||
"status.php",
|
||||
"REUSE.toml",
|
||||
"occ",
|
||||
"robots.txt",
|
||||
"package-lock.json",
|
||||
"composer.json",
|
||||
"dist/index-BA6DHN8z.chunk.mjs",
|
||||
"dist/common-NcUserBubble-BXR7vT0V-f2DD9EAL.chunk.css",
|
||||
"dist/files_external-auth_rsa.mjs.license",
|
||||
"dist/FilePicker-DcPPaTgX.chunk.mjs.license",
|
||||
"dist/core-public.js.license",
|
||||
"dist/1930-1930.js",
|
||||
"dist/index-yD-5b5y_.chunk.mjs.license",
|
||||
"dist/9811-9811.js.map.license",
|
||||
"dist/2426-2426.js.license",
|
||||
"dist/settings-vue-settings-admin-ai.js.map",
|
||||
"dist/files_trashbin-files_trashbin-init-nOmQ7X71.chunk.css",
|
||||
"dist/systemtags-init.mjs",
|
||||
"dist/NcUserStatusIcon-BF5OEQFU-B7JEw9np.chunk.mjs.map.license",
|
||||
"dist/core-unsupported-browser.js.map",
|
||||
"dist/oauth2-settings-admin.mjs.map",
|
||||
"dist/428-428.js.map",
|
||||
"dist/index-Cp0kcsps.chunk.mjs.map.license",
|
||||
"dist/files_external-settings.mjs.map.license",
|
||||
"dist/index-CwlKovrj.chunk.mjs.map.license",
|
||||
"dist/SetStatusModal-DOl5_a4J.chunk.mjs.map"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-nextcloud_nextcloud_html/_data",
|
||||
"target": "/var/www/html",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 69,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"nextcloud.log",
|
||||
"index.html",
|
||||
".ncdata",
|
||||
".htaccess",
|
||||
"admin/files/Reasons to use Nextcloud.pdf",
|
||||
"admin/files/Nextcloud Manual.pdf",
|
||||
"admin/files/Readme.md",
|
||||
"admin/files/Nextcloud intro.mp4",
|
||||
"admin/files/Templates credits.md",
|
||||
"admin/files/Nextcloud.png",
|
||||
"admin/files/Templates/Gotong royong.odp",
|
||||
"admin/files/Templates/Business model canvas.ods",
|
||||
"admin/files/Templates/Mind map.whiteboard",
|
||||
"admin/files/Templates/Venn diagram.whiteboard",
|
||||
"admin/files/Templates/Mother's day.odt",
|
||||
"admin/files/Templates/Meeting agenda.whiteboard",
|
||||
"admin/files/Templates/Meeting notes.md",
|
||||
"admin/files/Templates/Business model canvas.odg",
|
||||
"admin/files/Templates/Impact effort.whiteboard",
|
||||
"admin/files/Templates/Report.odt",
|
||||
"admin/files/Templates/Party invitation.odt",
|
||||
"admin/files/Templates/Kanban board.whiteboard",
|
||||
"admin/files/Templates/Invoice.ods",
|
||||
"admin/files/Templates/Brainstorming.whiteboard",
|
||||
"admin/files/Templates/Checklist.ods",
|
||||
"admin/files/Templates/Mindmap.odg",
|
||||
"admin/files/Templates/Certificate.odt",
|
||||
"admin/files/Templates/Sticky notes.whiteboard",
|
||||
"admin/files/Templates/Business model canvas.whiteboard",
|
||||
"admin/files/Templates/Diagram & table.ods",
|
||||
"admin/files/Templates/Triangle.odp",
|
||||
"admin/files/Templates/Menu.odt",
|
||||
"admin/files/Templates/Modern company.odp",
|
||||
"admin/files/Templates/Invoice.odt",
|
||||
"admin/files/Templates/Pitch deck.odp",
|
||||
"admin/files/Templates/Flowchart.odg",
|
||||
"admin/files/Templates/Timesheet.ods",
|
||||
"admin/files/Templates/Product plan.md",
|
||||
"admin/files/Templates/Syllabus.odt",
|
||||
"admin/files/Templates/Onboarding.odp"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/appdata/nextcloud",
|
||||
"target": "/var/www/html/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "nextcloud",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "mariadb:12.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 471,
|
||||
"name": "volgate-nextcloud_nextcloud_db_data",
|
||||
"sample": [
|
||||
"tc.log",
|
||||
".my-healthcheck.cnf",
|
||||
"aria_log.00000001",
|
||||
"aria_log_control",
|
||||
"undo001",
|
||||
"ibtmp1",
|
||||
"ib_buffer_pool",
|
||||
"ibdata1",
|
||||
"undo002",
|
||||
"multi-master.info",
|
||||
"mariadb_upgrade_info",
|
||||
"ddl_recovery.log",
|
||||
"ib_logfile0",
|
||||
"undo003",
|
||||
"performance_schema/db.opt",
|
||||
"mysql/func.frm",
|
||||
"mysql/index_stats.MAD",
|
||||
"mysql/transaction_registry.ibd",
|
||||
"mysql/time_zone_transition_type.frm",
|
||||
"mysql/global_priv.MAD",
|
||||
"mysql/time_zone_leap_second.MAI",
|
||||
"mysql/column_stats.MAD",
|
||||
"mysql/time_zone_transition.MAI",
|
||||
"mysql/plugin.MAD",
|
||||
"mysql/time_zone.MAD",
|
||||
"mysql/column_stats.frm",
|
||||
"mysql/db.MAD",
|
||||
"mysql/help_keyword.frm",
|
||||
"mysql/help_relation.frm",
|
||||
"mysql/procs_priv.MAI",
|
||||
"mysql/servers.frm",
|
||||
"mysql/innodb_index_stats.frm",
|
||||
"mysql/roles_mapping.frm",
|
||||
"mysql/plugin.MAI",
|
||||
"mysql/time_zone_name.MAD",
|
||||
"mysql/user.frm",
|
||||
"mysql/time_zone.MAI",
|
||||
"mysql/global_priv.frm",
|
||||
"mysql/proxies_priv.MAI",
|
||||
"mysql/time_zone_transition_type.MAI"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-nextcloud_nextcloud_db_data/_data",
|
||||
"target": "/var/lib/mysql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "nextcloud-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-nextcloud_nextcloud_redis_data",
|
||||
"sample": [
|
||||
"appendonlydir/appendonly.aof.1.incr.aof",
|
||||
"appendonlydir/appendonly.aof.manifest",
|
||||
"appendonlydir/appendonly.aof.1.base.rdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-nextcloud_nextcloud_redis_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "nextcloud-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"nextcloud_db_data",
|
||||
"nextcloud_html",
|
||||
"nextcloud_redis_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"MYSQL_ROOT_PASSWORD",
|
||||
"NEXTCLOUD_ADMIN_PASSWORD",
|
||||
"NEXTCLOUD_ADMIN_USER",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:80/ -> 302",
|
||||
"192.168.128.4:80/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
80
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+6646
File diff suppressed because it is too large
Load Diff
+107
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "opengist",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"opengist"
|
||||
],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"opengist"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"passwd-",
|
||||
"group-"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/home",
|
||||
"files": [
|
||||
"opengist"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".gitconfig"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/home/opengist",
|
||||
"files": [
|
||||
".gitconfig"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 10,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/thomiceli/opengist:1.15",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 9,
|
||||
"name": "volgate-opengist_opengist_data",
|
||||
"sample": [
|
||||
"opengist.db",
|
||||
"opengist-secret.key",
|
||||
"sessions/session-encrypt.key",
|
||||
"opengist.index/index_meta.json",
|
||||
"opengist.index/store/root.bolt",
|
||||
"symlinks/config.yml",
|
||||
"symlinks/opengist",
|
||||
"log/opengist.log",
|
||||
"ssh/opengist-ed25519"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-opengist_opengist_data/_data",
|
||||
"target": "/opengist",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "opengist",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"opengist_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:6157/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
6157
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "outline",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1001,
|
||||
"health": "healthy",
|
||||
"image": "outlinewiki/outline:1.10.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-outline_outline_data",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-outline_outline_data/_data",
|
||||
"target": "/var/lib/outline/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "outline",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1001
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:18-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1669,
|
||||
"name": "volgate-outline_outline_postgres_data",
|
||||
"sample": [
|
||||
"18/docker/pg_ident.conf",
|
||||
"18/docker/pg_hba.conf",
|
||||
"18/docker/postmaster.pid",
|
||||
"18/docker/postgresql.conf",
|
||||
"18/docker/PG_VERSION",
|
||||
"18/docker/postgresql.auto.conf",
|
||||
"18/docker/postmaster.opts",
|
||||
"18/docker/base/5/2612",
|
||||
"18/docker/base/5/1418",
|
||||
"18/docker/base/5/6117",
|
||||
"18/docker/base/5/13510_fsm",
|
||||
"18/docker/base/5/2655",
|
||||
"18/docker/base/5/3609",
|
||||
"18/docker/base/5/2662",
|
||||
"18/docker/base/5/2683",
|
||||
"18/docker/base/5/2832",
|
||||
"18/docker/base/5/2679",
|
||||
"18/docker/base/5/2608_vm",
|
||||
"18/docker/base/5/2673",
|
||||
"18/docker/base/5/2690",
|
||||
"18/docker/base/5/2336",
|
||||
"18/docker/base/5/2754",
|
||||
"18/docker/base/5/2701",
|
||||
"18/docker/base/5/4168",
|
||||
"18/docker/base/5/2650",
|
||||
"18/docker/base/5/2839",
|
||||
"18/docker/base/5/2688",
|
||||
"18/docker/base/5/2840",
|
||||
"18/docker/base/5/1247_fsm",
|
||||
"18/docker/base/5/3997",
|
||||
"18/docker/base/5/3456_vm",
|
||||
"18/docker/base/5/2667",
|
||||
"18/docker/base/5/2678",
|
||||
"18/docker/base/5/2696",
|
||||
"18/docker/base/5/3456",
|
||||
"18/docker/base/5/2228",
|
||||
"18/docker/base/5/1259_fsm",
|
||||
"18/docker/base/5/6351",
|
||||
"18/docker/base/5/6106",
|
||||
"18/docker/base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-outline_outline_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "outline-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-outline_outline_redis_data",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-outline_outline_redis_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "outline-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"outline_data",
|
||||
"outline_postgres_data",
|
||||
"outline_redis_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH",
|
||||
"UTILS_SECRET"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 301",
|
||||
"192.168.176.4:3000/ -> 301",
|
||||
"fixture Outline: seed OK \u2014 outline: seeded document drilldoc-ed522bc2"
|
||||
],
|
||||
"fixture": "fixture Outline: seed OK \u2014 outline: seeded document drilldoc-ed522bc2",
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"outline: declared volume /var/lib/outline/data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"outline-redis: declared volume /data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+255
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "paperless-ngx",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:18-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1931,
|
||||
"name": "volgate-paperlessngx_paperless_postgres_data",
|
||||
"sample": [
|
||||
"18/docker/pg_ident.conf",
|
||||
"18/docker/pg_hba.conf",
|
||||
"18/docker/postmaster.pid",
|
||||
"18/docker/postgresql.conf",
|
||||
"18/docker/PG_VERSION",
|
||||
"18/docker/postgresql.auto.conf",
|
||||
"18/docker/postmaster.opts",
|
||||
"18/docker/base/5/2612",
|
||||
"18/docker/base/5/1418",
|
||||
"18/docker/base/5/6117",
|
||||
"18/docker/base/5/13510_fsm",
|
||||
"18/docker/base/5/2655",
|
||||
"18/docker/base/5/3609",
|
||||
"18/docker/base/5/2662",
|
||||
"18/docker/base/5/2683",
|
||||
"18/docker/base/5/2832",
|
||||
"18/docker/base/5/2679",
|
||||
"18/docker/base/5/2608_vm",
|
||||
"18/docker/base/5/2673",
|
||||
"18/docker/base/5/2690",
|
||||
"18/docker/base/5/2336",
|
||||
"18/docker/base/5/2754",
|
||||
"18/docker/base/5/2701",
|
||||
"18/docker/base/5/4168",
|
||||
"18/docker/base/5/2650",
|
||||
"18/docker/base/5/2839",
|
||||
"18/docker/base/5/2688",
|
||||
"18/docker/base/5/2840",
|
||||
"18/docker/base/5/1247_fsm",
|
||||
"18/docker/base/5/3997",
|
||||
"18/docker/base/5/3456_vm",
|
||||
"18/docker/base/5/2667",
|
||||
"18/docker/base/5/2678",
|
||||
"18/docker/base/5/2696",
|
||||
"18/docker/base/5/3456",
|
||||
"18/docker/base/5/2228",
|
||||
"18/docker/base/5/1259_fsm",
|
||||
"18/docker/base/5/6351",
|
||||
"18/docker/base/5/6106",
|
||||
"18/docker/base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-paperlessngx_paperless_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "paperless-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-paperlessngx_paperless_redis_data",
|
||||
"sample": [
|
||||
"appendonlydir/appendonly.aof.1.incr.aof",
|
||||
"appendonlydir/appendonly.aof.manifest",
|
||||
"appendonlydir/appendonly.aof.1.base.rdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-paperlessngx_paperless_redis_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "paperless-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
},
|
||||
{
|
||||
"diff_added": 265,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run",
|
||||
"usr",
|
||||
"var"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"share"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"log",
|
||||
"cache",
|
||||
"lib"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/var/lib",
|
||||
"files": [
|
||||
"apt",
|
||||
"dpkg"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 294,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/paperless-ngx/paperless-ngx:2.20.15",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 1,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"media.lock"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/appdata/paperless/media",
|
||||
"target": "/usr/src/paperless/media",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/import/paperless",
|
||||
"target": "/usr/src/paperless/consume",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/appdata/paperless/export",
|
||||
"target": "/usr/src/paperless/export",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 9,
|
||||
"name": "volgate-paperlessngx_paperless_data",
|
||||
"sample": [
|
||||
"migration_lock",
|
||||
".index_version",
|
||||
"celerybeat-schedule.db",
|
||||
"log/celery.log",
|
||||
"log/.__celery.lock",
|
||||
"log/paperless.log",
|
||||
"log/.__paperless.lock",
|
||||
"index/MAIN_WRITELOCK",
|
||||
"index/_MAIN_1.toc"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-paperlessngx_paperless_data/_data",
|
||||
"target": "/usr/src/paperless/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "paperless-webserver",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"paperless_data",
|
||||
"paperless_postgres_data",
|
||||
"paperless_redis_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"PAPERLESS_ADMIN_PASSWORD",
|
||||
"PAPERLESS_ADMIN_USER",
|
||||
"PAPERLESS_OCR_LANGUAGE",
|
||||
"PAPERLESS_SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8000/ -> 302",
|
||||
"192.168.192.4:8000/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "papra",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 176,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 177,
|
||||
"diff_unresolved": [],
|
||||
"exit": 137,
|
||||
"gid": null,
|
||||
"health": "unhealthy",
|
||||
"image": "ghcr.io/papra-hq/papra:26.6.2-rootless",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-papra_papra_data",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-papra_papra_data/_data",
|
||||
"target": "/app/app-data",
|
||||
"writable_by_app": "unknown-uid"
|
||||
}
|
||||
],
|
||||
"name": "papra",
|
||||
"restarts": null,
|
||||
"status": "restarting",
|
||||
"uid": null
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"papra_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"AUTH_SECRET",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
1221
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"papra: not running (status=restarting exit=137 restarts=None)"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "papra",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 175,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 176,
|
||||
"diff_unresolved": [],
|
||||
"exit": 137,
|
||||
"gid": null,
|
||||
"health": "unhealthy",
|
||||
"image": "ghcr.io/papra-hq/papra:26.6.2-rootless",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-papra_papra_data",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-papra_papra_data/_data",
|
||||
"target": "/app/app-data",
|
||||
"writable_by_app": "unknown-uid"
|
||||
}
|
||||
],
|
||||
"name": "papra",
|
||||
"restarts": null,
|
||||
"status": "restarting",
|
||||
"uid": null
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"papra_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"AUTH_SECRET",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
1221
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"papra: not running (status=restarting exit=137 restarts=None)"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "plant-it",
|
||||
"error": "no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\nError response from daemon: pull access denied for msdeluise/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n)"
|
||||
},
|
||||
"reasons": [
|
||||
"no containers created (compose up rc=18: se/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\nError response from daemon: pull access denied for msdeluise/plant-it, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\n)"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "plex",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 63,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
".firstRunComplete"
|
||||
],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
".firstRunComplete"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"cont-init.d",
|
||||
"services.d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/cont-init.d",
|
||||
"files": [
|
||||
"40-plex-first-run",
|
||||
"45-plex-hw-transcode-and-connected-tuner",
|
||||
"50-plex-update"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/services.d",
|
||||
"files": [
|
||||
"plex"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/services.d/plex",
|
||||
"files": [
|
||||
"finish",
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 74,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "plexinc/pms-docker:1.41.4.9463-630c9f557",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 4,
|
||||
"name": null,
|
||||
"sample": [
|
||||
"books/metadata.db-wal",
|
||||
"books/metadata.db",
|
||||
"books/metadata.db-shm",
|
||||
"metube/Big_Buck_Bunny_360_10s_1MB.mp4"
|
||||
],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media",
|
||||
"target": "/media",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-plex_plex_transcode",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-plex_plex_transcode/_data",
|
||||
"target": "/transcode",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 82,
|
||||
"name": "volgate-plex_plex_config",
|
||||
"sample": [
|
||||
"Library/Application Support/Plex Media Server/Preferences.xml",
|
||||
"Library/Application Support/Plex Media Server/plexmediaserver.pid",
|
||||
"Library/Application Support/Plex Media Server/Setup Plex.html",
|
||||
"Library/Application Support/Plex Media Server/.LocalAdminToken",
|
||||
"Library/Application Support/Plex Media Server/Codecs/.device-id",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Albums.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/org.musicbrainz.agents.music/Artists.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.imdb/Movies.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Albums.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.lastfm/Artists.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.thetvdb/TV Shows.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Albums.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/tv.plex.agents.music/Artists.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.themoviedb/Movies.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Movies.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Albums.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/Artists.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.none/TV Shows.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Movies.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Albums.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/Artists.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Metadata Combination/com.plexapp.agents.localmedia/TV Shows.xml",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.imdb/HTTP.system/CacheInfo",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Caches/com.plexapp.agents.localmedia/HTTP.system/CacheInfo",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/org.musicbrainz.agents.music/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lyricfind/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.movieposterdb/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.htbackdrops/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.imdb/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.lastfm/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/HTTPCookies",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.agents.thetvdb/StoredValues",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/Dict",
|
||||
"Library/Application Support/Plex Media Server/Plug-in Support/Data/com.plexapp.system/HTTPCookies"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-plex_plex_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "plex",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"plex_config",
|
||||
"plex_transcode"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"PLEX_CLAIM",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:32400/ -> 200",
|
||||
"fixture NoRoute: seed returned nothing (tried: the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue) \u2014 plex: no non-browser seed route \u2014 the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue"
|
||||
],
|
||||
"fixture": "fixture NoRoute: seed returned nothing (tried: the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue) \u2014 plex: no non-browser seed route \u2014 the first-run claim needs a token minted at plex.tv by a real Plex account; no account exists for this venue",
|
||||
"ports": [
|
||||
32400
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"plex: declared volume /transcode is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "privatebin",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 82,
|
||||
"health": "healthy",
|
||||
"image": "privatebin/pdo:2.0.6",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 5,
|
||||
"name": "volgate-privatebin_privatebin_data",
|
||||
"sample": [
|
||||
"traffic_limiter.php",
|
||||
"salt.php",
|
||||
"purge_limiter.php",
|
||||
".htaccess",
|
||||
"26/0c/260cce3d99910079.php"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-privatebin_privatebin_data/_data",
|
||||
"target": "/srv/data",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "anonymous",
|
||||
"files": 14,
|
||||
"name": "7eb4e7f20411a82cdac9c3704a0f2d963b055c0fb16b3061595d9727c140ee64",
|
||||
"sample": [
|
||||
"nginx.pid",
|
||||
"php-fpm.sock",
|
||||
"services/nginx/run",
|
||||
"services/nginx/supervise/control",
|
||||
"services/nginx/supervise/death_tally",
|
||||
"services/nginx/supervise/status",
|
||||
"services/nginx/supervise/lock",
|
||||
"services/.s6-svscan/control",
|
||||
"services/.s6-svscan/lock",
|
||||
"services/php-fpm85/run",
|
||||
"services/php-fpm85/supervise/control",
|
||||
"services/php-fpm85/supervise/death_tally",
|
||||
"services/php-fpm85/supervise/status",
|
||||
"services/php-fpm85/supervise/lock"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/7eb4e7f20411a82cdac9c3704a0f2d963b055c0fb16b3061595d9727c140ee64/_data",
|
||||
"target": "/run",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "anonymous",
|
||||
"files": 0,
|
||||
"name": "bf4b15e53ba87a7f8a4077ecefc4fbe9956af355f85d44612981763a579b77fe",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/bf4b15e53ba87a7f8a4077ecefc4fbe9956af355f85d44612981763a579b77fe/_data",
|
||||
"target": "/tmp",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "anonymous",
|
||||
"files": 0,
|
||||
"name": "24726ad13c5aae4968b89fb34d33e56f9bd4977d82b37f239790fcbd4d364128",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/24726ad13c5aae4968b89fb34d33e56f9bd4977d82b37f239790fcbd4d364128/_data",
|
||||
"target": "/var/lib/nginx/tmp",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "privatebin",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 65534
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"privatebin_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8080/ -> 200",
|
||||
"fixture PrivateBin: seed OK \u2014 privatebin: seeded paste id=260cce3d99910079"
|
||||
],
|
||||
"fixture": "fixture PrivateBin: seed OK \u2014 privatebin: seeded paste id=260cce3d99910079",
|
||||
"ports": [
|
||||
8080
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "radarr",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 207,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"downloads"
|
||||
],
|
||||
"changed_count": 5,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"downloads"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 4,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"crontabs",
|
||||
"group-",
|
||||
"s6-overlay",
|
||||
"passwd-"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/crontabs",
|
||||
"files": [
|
||||
"root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay",
|
||||
"files": [
|
||||
"s6-rc.d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d",
|
||||
"files": [
|
||||
"init-adduser"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d/init-adduser",
|
||||
"files": [
|
||||
"branding"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"movies"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/media",
|
||||
"files": [
|
||||
"movies"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_total": 222,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "lscr.io/linuxserver/radarr:6.4.4",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/movies",
|
||||
"target": "/media/movies",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/downloads",
|
||||
"target": "/downloads",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 9,
|
||||
"name": "volgate-radarr_radarr_config",
|
||||
"sample": [
|
||||
"radarr.pid",
|
||||
"logs.db",
|
||||
"radarr.db-wal",
|
||||
"radarr.db-shm",
|
||||
"radarr.db",
|
||||
"config.xml",
|
||||
"logs/radarr.debug.txt",
|
||||
"logs/radarr.txt",
|
||||
"asp/key-9e066fdb-a00e-470f-970d-5e947dfa0e1c.xml"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-radarr_radarr_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "radarr",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"radarr_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:7878/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
7878
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"radarr: writable-layer writes at /media (path suggests state, no database signature \u2014 judgement needed): ['movies']"
|
||||
],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "radicale",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/kozea/radicale:3.8.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-radicale_radicale_data",
|
||||
"sample": [
|
||||
"users"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-radicale_radicale_data/_data",
|
||||
"target": "/var/lib/radicale",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "radicale",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"radicale_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"RADICALE_PASSWORD",
|
||||
"RADICALE_USER",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:5232/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
5232
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "rallly",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 6,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"apps"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/apps",
|
||||
"files": [
|
||||
"web"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/apps/web",
|
||||
"files": [
|
||||
".next"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 11,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 101,
|
||||
"health": "healthy",
|
||||
"image": "lukevella/rallly:4.15.3",
|
||||
"mounts": [],
|
||||
"name": "rallly",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 100
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:18-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1607,
|
||||
"name": "volgate-rallly_rallly_postgres_data",
|
||||
"sample": [
|
||||
"18/docker/pg_ident.conf",
|
||||
"18/docker/pg_hba.conf",
|
||||
"18/docker/postmaster.pid",
|
||||
"18/docker/postgresql.conf",
|
||||
"18/docker/PG_VERSION",
|
||||
"18/docker/postgresql.auto.conf",
|
||||
"18/docker/postmaster.opts",
|
||||
"18/docker/base/5/2612",
|
||||
"18/docker/base/5/1418",
|
||||
"18/docker/base/5/6117",
|
||||
"18/docker/base/5/13510_fsm",
|
||||
"18/docker/base/5/2655",
|
||||
"18/docker/base/5/3609",
|
||||
"18/docker/base/5/2662",
|
||||
"18/docker/base/5/2683",
|
||||
"18/docker/base/5/2832",
|
||||
"18/docker/base/5/2679",
|
||||
"18/docker/base/5/2608_vm",
|
||||
"18/docker/base/5/2673",
|
||||
"18/docker/base/5/2690",
|
||||
"18/docker/base/5/2336",
|
||||
"18/docker/base/5/2754",
|
||||
"18/docker/base/5/2701",
|
||||
"18/docker/base/5/4168",
|
||||
"18/docker/base/5/2650",
|
||||
"18/docker/base/5/2839",
|
||||
"18/docker/base/5/2688",
|
||||
"18/docker/base/5/2840",
|
||||
"18/docker/base/5/1247_fsm",
|
||||
"18/docker/base/5/3997",
|
||||
"18/docker/base/5/3456_vm",
|
||||
"18/docker/base/5/2667",
|
||||
"18/docker/base/5/2678",
|
||||
"18/docker/base/5/2696",
|
||||
"18/docker/base/5/3456",
|
||||
"18/docker/base/5/2228",
|
||||
"18/docker/base/5/1259_fsm",
|
||||
"18/docker/base/5/6351",
|
||||
"18/docker/base/5/6106",
|
||||
"18/docker/base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-rallly_rallly_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "rallly-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"rallly_postgres_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_PASSWORD",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 200",
|
||||
"192.168.240.3:3000/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "recipe-importer",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 14,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"data"
|
||||
],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local",
|
||||
"files": [
|
||||
"lib"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 25,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "gitea.dooplex.hu/admin/recipe-importer:v0.9.11",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-recipeimporter_recipe_data",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-recipeimporter_recipe_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "recipe-importer",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"recipe_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8000/ -> 302",
|
||||
"172.18.0.2:8000/ -> 200",
|
||||
"172.18.0.2:8000/login -> 404",
|
||||
"172.18.0.2:8000/setup -> 404",
|
||||
"172.18.0.2:8000/signup -> 404",
|
||||
"172.18.0.2:8000/register -> 404",
|
||||
"172.18.0.2:8000/install -> 404",
|
||||
"172.18.0.2:8000/admin -> 404",
|
||||
"172.18.0.2:8000/api/health -> 404",
|
||||
"172.18.0.2:8000/health -> 200",
|
||||
"172.18.0.2:8000/healthz -> 404",
|
||||
"172.18.0.2:8000/status -> 404",
|
||||
"172.18.0.2:8000/web -> 404",
|
||||
"172.18.0.2:8000/index.php -> 404",
|
||||
"172.18.0.2:8000/dashboard -> 404"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"NOTHING this app wrote landed in ANY folder the template preserves: all 1 mount(s) across 1 container(s) are empty, yet entries were created in ['/']. Needs adjudication.",
|
||||
"recipe-importer: declared volume /data is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"recipe-importer: this container's mounts are all empty while it created entries in ['/'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "romm",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 14,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"etc",
|
||||
"root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"nginx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".gunicorn"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".gunicorn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"gunicorn.ctl"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.gunicorn",
|
||||
"files": [
|
||||
"gunicorn.ctl"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 20,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "rommapp/romm:5.3.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1,
|
||||
"name": "volgate-romm_romm_config",
|
||||
"sample": [
|
||||
"config.yml"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-romm_romm_config/_data",
|
||||
"target": "/romm/config",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "anonymous",
|
||||
"files": 0,
|
||||
"name": "31468144ed55da1c8bdb6ad0b92cb853ddb07e3fb19c331b0da029ff16059249",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/31468144ed55da1c8bdb6ad0b92cb853ddb07e3fb19c331b0da029ff16059249/_data",
|
||||
"target": "/redis-data",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "anonymous",
|
||||
"files": 0,
|
||||
"name": "a74329f8446959f3471049d810da801e405c77cb541b14a9547c94d460307db9",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/a74329f8446959f3471049d810da801e405c77cb541b14a9547c94d460307db9/_data",
|
||||
"target": "/romm",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/roms",
|
||||
"target": "/romm/library",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/appdata/romm/resources",
|
||||
"target": "/romm/resources",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "romm",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 999,
|
||||
"health": "healthy",
|
||||
"image": "mariadb:11.8",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 302,
|
||||
"name": "volgate-romm_romm_db_data",
|
||||
"sample": [
|
||||
"tc.log",
|
||||
".my-healthcheck.cnf",
|
||||
"aria_log.00000001",
|
||||
"aria_log_control",
|
||||
"undo001",
|
||||
"ibtmp1",
|
||||
"ib_buffer_pool",
|
||||
"ibdata1",
|
||||
"undo002",
|
||||
"multi-master.info",
|
||||
"mariadb_upgrade_info",
|
||||
"ddl_recovery.log",
|
||||
"ib_logfile0",
|
||||
"undo003",
|
||||
"romm/roms_facets_after_insert.TRN",
|
||||
"romm/music_playlists.frm",
|
||||
"romm/collections.ibd",
|
||||
"romm/streaming_container_adoptions.ibd",
|
||||
"romm/devices.ibd",
|
||||
"romm/smart_collections.frm",
|
||||
"romm/virtual_collection_roms.ibd",
|
||||
"romm/FTS_000000000000009c_DELETED.ibd",
|
||||
"romm/FTS_000000000000009c_BEING_DELETED_CACHE.ibd",
|
||||
"romm/rom_identity_keys_au.TRN",
|
||||
"romm/saves.ibd",
|
||||
"romm/track_meta.frm",
|
||||
"romm/screenshots.frm",
|
||||
"romm/permission_group_grants.ibd",
|
||||
"romm/streaming_container_adoptions.frm",
|
||||
"romm/rom_user.ibd",
|
||||
"romm/device_save_sync.frm",
|
||||
"romm/rom_similarity.ibd",
|
||||
"romm/rom_identity_keys.ibd",
|
||||
"romm/users.ibd",
|
||||
"romm/virtual_collections.frm",
|
||||
"romm/FTS_000000000000009c_0000000000000200_INDEX_1.ibd",
|
||||
"romm/firmware.ibd",
|
||||
"romm/screenshots.ibd",
|
||||
"romm/rom_file_doc_meta.frm",
|
||||
"romm/FTS_000000000000009c_DELETED_CACHE.ibd"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-romm_romm_db_data/_data",
|
||||
"target": "/var/lib/mysql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "romm-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "redis:7-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 4,
|
||||
"name": "volgate-romm_romm_redis_data",
|
||||
"sample": [
|
||||
"dump.rdb",
|
||||
"appendonlydir/appendonly.aof.1.incr.aof",
|
||||
"appendonlydir/appendonly.aof.manifest",
|
||||
"appendonlydir/appendonly.aof.1.base.rdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-romm_romm_redis_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "romm-redis",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 999
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"romm_config",
|
||||
"romm_db_data",
|
||||
"romm_redis_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"MYSQL_ROOT_PASSWORD",
|
||||
"ROMM_AUTH_SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8080/ -> 200",
|
||||
"172.19.0.4:8080/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8080
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "seerr",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "fallenbagel/jellyseerr:2.7.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 11,
|
||||
"name": "volgate-seerr_seerr_config",
|
||||
"sample": [
|
||||
"DOCKER",
|
||||
"settings.json",
|
||||
"logs/.20136e5b8544ec13f7fc29ce3d35150d597108bb-audit.json",
|
||||
"logs/jellyseerr.log",
|
||||
"logs/.machinelogs-2026-10-02.json",
|
||||
"logs/.4295fcfc416647ffc3751a1d488b45a096cf2d4f-audit.json",
|
||||
"logs/jellyseerr-2026-10-02.log",
|
||||
"logs/.machinelogs.json",
|
||||
"db/db.sqlite3",
|
||||
"db/db.sqlite3-shm",
|
||||
"db/db.sqlite3-wal"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-seerr_seerr_config/_data",
|
||||
"target": "/app/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "seerr",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"seerr_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:5055/ -> 307"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
5055
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "sonarr",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 209,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"downloads"
|
||||
],
|
||||
"changed_count": 5,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"downloads"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 4,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"passwd-",
|
||||
"s6-overlay",
|
||||
"crontabs",
|
||||
"group-"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/crontabs",
|
||||
"files": [
|
||||
"root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay",
|
||||
"files": [
|
||||
"s6-rc.d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d",
|
||||
"files": [
|
||||
"init-adduser"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc/s6-overlay/s6-rc.d/init-adduser",
|
||||
"files": [
|
||||
"branding"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"tv"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/media",
|
||||
"files": [
|
||||
"tv"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_total": 224,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "lscr.io/linuxserver/sonarr:4.0.20",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/media/tv",
|
||||
"target": "/media/tv",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "bind",
|
||||
"files": 0,
|
||||
"name": null,
|
||||
"sample": [],
|
||||
"source": "/srv/felhom-gate/hdd/userdata/downloads",
|
||||
"target": "/downloads",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 11,
|
||||
"name": "volgate-sonarr_sonarr_config",
|
||||
"sample": [
|
||||
"sonarr.db-shm",
|
||||
"sonarr.pid",
|
||||
"logs.db",
|
||||
"sonarr.db-wal",
|
||||
"config.xml",
|
||||
"logs.db-shm",
|
||||
"logs.db-wal",
|
||||
"sonarr.db",
|
||||
"logs/sonarr.txt",
|
||||
"logs/sonarr.debug.txt",
|
||||
"asp/key-6ffba64a-2d7f-4565-9e2c-76f140125460.xml"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-sonarr_sonarr_config/_data",
|
||||
"target": "/config",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "sonarr",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"sonarr_config"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8989/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8989
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"sonarr: writable-layer writes at /media (path suggests state, no database signature \u2014 judgement needed): ['tv']"
|
||||
],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+237
@@ -0,0 +1,237 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "sparkyfitness",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 11,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"var",
|
||||
"etc",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"nginx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"cache"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 19,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "codewithcj/sparkyfitness:v0.17.3",
|
||||
"mounts": [],
|
||||
"name": "sparkyfitness",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:18-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1822,
|
||||
"name": "volgate-sparkyfitness_sparkyfitness_db_data",
|
||||
"sample": [
|
||||
"data/pgdata/pg_ident.conf",
|
||||
"data/pgdata/pg_hba.conf",
|
||||
"data/pgdata/postmaster.pid",
|
||||
"data/pgdata/postgresql.conf",
|
||||
"data/pgdata/PG_VERSION",
|
||||
"data/pgdata/postgresql.auto.conf",
|
||||
"data/pgdata/postmaster.opts",
|
||||
"data/pgdata/base/5/2612",
|
||||
"data/pgdata/base/5/1418",
|
||||
"data/pgdata/base/5/6117",
|
||||
"data/pgdata/base/5/13510_fsm",
|
||||
"data/pgdata/base/5/2655",
|
||||
"data/pgdata/base/5/3609",
|
||||
"data/pgdata/base/5/2662",
|
||||
"data/pgdata/base/5/2683",
|
||||
"data/pgdata/base/5/2832",
|
||||
"data/pgdata/base/5/2679",
|
||||
"data/pgdata/base/5/2608_vm",
|
||||
"data/pgdata/base/5/2673",
|
||||
"data/pgdata/base/5/2690",
|
||||
"data/pgdata/base/5/2336",
|
||||
"data/pgdata/base/5/2754",
|
||||
"data/pgdata/base/5/2701",
|
||||
"data/pgdata/base/5/4168",
|
||||
"data/pgdata/base/5/2650",
|
||||
"data/pgdata/base/5/2839",
|
||||
"data/pgdata/base/5/2688",
|
||||
"data/pgdata/base/5/2840",
|
||||
"data/pgdata/base/5/1247_fsm",
|
||||
"data/pgdata/base/5/3997",
|
||||
"data/pgdata/base/5/3456_vm",
|
||||
"data/pgdata/base/5/2667",
|
||||
"data/pgdata/base/5/2678",
|
||||
"data/pgdata/base/5/2696",
|
||||
"data/pgdata/base/5/3456",
|
||||
"data/pgdata/base/5/2228",
|
||||
"data/pgdata/base/5/1259_fsm",
|
||||
"data/pgdata/base/5/6351",
|
||||
"data/pgdata/base/5/6106",
|
||||
"data/pgdata/base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-sparkyfitness_sparkyfitness_db_data/_data",
|
||||
"target": "/var/lib/postgresql",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "sparkyfitness-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
},
|
||||
{
|
||||
"diff_added": 392,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"SparkyFitnessServer"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"backup",
|
||||
"temp_uploads",
|
||||
"uploads"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app/SparkyFitnessServer",
|
||||
"files": [
|
||||
"backup",
|
||||
"temp_uploads",
|
||||
"uploads"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 395,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "codewithcj/sparkyfitness_server:v0.17.3",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-sparkyfitness_sparkyfitness_backup",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-sparkyfitness_sparkyfitness_backup/_data",
|
||||
"target": "/app/SparkyFitnessServer/backup",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-sparkyfitness_sparkyfitness_uploads",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-sparkyfitness_sparkyfitness_uploads/_data",
|
||||
"target": "/app/SparkyFitnessServer/uploads",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "sparkyfitness-server",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"sparkyfitness_backup",
|
||||
"sparkyfitness_db_data",
|
||||
"sparkyfitness_uploads"
|
||||
],
|
||||
"env_keys": [
|
||||
"API_ENCRYPTION_KEY",
|
||||
"APP_DB_PASSWORD",
|
||||
"BETTER_AUTH_SECRET",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:80/ -> 200",
|
||||
"172.20.0.4:80/ -> 200",
|
||||
"fixture Sparkyfitness: seed OK \u2014 sparkyfitness: seeded user drill4cb3a4 with a weight of 64.59 on 2026-09-01"
|
||||
],
|
||||
"fixture": "fixture Sparkyfitness: seed OK \u2014 sparkyfitness: seeded user drill4cb3a4 with a weight of 64.59 on 2026-09-01",
|
||||
"ports": [
|
||||
80
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"sparkyfitness-server: declared volume /app/SparkyFitnessServer/backup is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"sparkyfitness-server: declared volume /app/SparkyFitnessServer/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"sparkyfitness-server: this container's mounts are all empty while it created entries in ['/app/SparkyFitnessServer'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+292
@@ -0,0 +1,292 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "tandoor",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 443,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"root",
|
||||
"opt",
|
||||
"usr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/opt",
|
||||
"files": [
|
||||
"recipes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"mediafiles",
|
||||
"staticfiles"
|
||||
],
|
||||
"changed_count": 3,
|
||||
"db_signature": false,
|
||||
"dir": "/opt/recipes",
|
||||
"files": [
|
||||
"mediafiles",
|
||||
"staticfiles"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 7,
|
||||
"db_signature": false,
|
||||
"dir": "/opt/recipes/cookbook",
|
||||
"files": [
|
||||
"views",
|
||||
"connectors",
|
||||
"migrations",
|
||||
"provider",
|
||||
"templatetags",
|
||||
"integration",
|
||||
"helper"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"Recipes.conf"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/opt/recipes/http.d",
|
||||
"files": [
|
||||
"Recipes.conf"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".gunicorn"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".gunicorn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"gunicorn.ctl"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.gunicorn",
|
||||
"files": [
|
||||
"gunicorn.ctl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/local",
|
||||
"files": [
|
||||
"lib"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 493,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/tandoorrecipes/recipes:2.6.15",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3359,
|
||||
"name": "volgate-tandoor_tandoor_static",
|
||||
"sample": [
|
||||
"staticfiles.json",
|
||||
"assets/logo_color_shopping_144.png",
|
||||
"assets/logo_black.svg",
|
||||
"assets/logo_color_180.png",
|
||||
"assets/logo_color_shopping_512.6b2e69402327.png",
|
||||
"assets/brand_logo.ad2e3aa263da.svg.gz",
|
||||
"assets/logo_color_180.0fcae5e85a72.png",
|
||||
"assets/logo_black.dc487b18028c.svg.gz",
|
||||
"assets/brand_logo.ad2e3aa263da.svg",
|
||||
"assets/brand_logo_white.svg",
|
||||
"assets/logo_color_svg.svg.gz",
|
||||
"assets/logo_color_144.png",
|
||||
"assets/logo_color_svg.d7c2e31a63b7.svg",
|
||||
"assets/header.48e8ad9e7540.svg.gz",
|
||||
"assets/spinner.168a09fd2600.svg.gz",
|
||||
"assets/spinner.168a09fd2600.svg",
|
||||
"assets/recipe_no_image.c659e2604ad6.svg",
|
||||
"assets/logo_color_shopping.svg.gz",
|
||||
"assets/logo_color_144.f09537dbf142.png",
|
||||
"assets/brand_logo.svg.gz",
|
||||
"assets/logo_color_plan.4ccbb336af9d.svg.gz",
|
||||
"assets/brand_logo.6ebe02bf6707.png",
|
||||
"assets/logo_black.dc487b18028c.svg",
|
||||
"assets/logo_color_32.b7d9707eac91.png",
|
||||
"assets/logo_color_32.png",
|
||||
"assets/logo_black.svg.gz",
|
||||
"assets/logo_color_plan_512.png",
|
||||
"assets/header.svg",
|
||||
"assets/logo_color_plan.4ccbb336af9d.svg",
|
||||
"assets/logo_color_512.png",
|
||||
"assets/logo_color_shopping.svg",
|
||||
"assets/logo_color_shopping.fd1e81a4dcab.svg",
|
||||
"assets/logo_color_shopping_144.6c05e01d07b2.png",
|
||||
"assets/recipe_no_image.svg",
|
||||
"assets/logo_color_shopping_512.png",
|
||||
"assets/logo_color_192.c9b9177ff941.png",
|
||||
"assets/logo_color_128.a90db52449d9.png",
|
||||
"assets/logo_color_plan_144.png",
|
||||
"assets/spinner.svg",
|
||||
"assets/brand_logo.svg"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-tandoor_tandoor_static/_data",
|
||||
"target": "/opt/recipes/staticfiles",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-tandoor_tandoor_media",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-tandoor_tandoor_media/_data",
|
||||
"target": "/opt/recipes/mediafiles",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "tandoor",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:17-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2003,
|
||||
"name": "volgate-tandoor_tandoor_postgres_data",
|
||||
"sample": [
|
||||
"pg_ident.conf",
|
||||
"pg_hba.conf",
|
||||
"postmaster.pid",
|
||||
"postgresql.conf",
|
||||
"PG_VERSION",
|
||||
"postgresql.auto.conf",
|
||||
"postmaster.opts",
|
||||
"base/5/2612",
|
||||
"base/5/1418",
|
||||
"base/5/6117",
|
||||
"base/5/13510_fsm",
|
||||
"base/5/2655",
|
||||
"base/5/3609",
|
||||
"base/5/2662",
|
||||
"base/5/2683",
|
||||
"base/5/2832",
|
||||
"base/5/13500_vm",
|
||||
"base/5/2679",
|
||||
"base/5/2608_vm",
|
||||
"base/5/2673",
|
||||
"base/5/2690",
|
||||
"base/5/2336",
|
||||
"base/5/2754",
|
||||
"base/5/2701",
|
||||
"base/5/4168",
|
||||
"base/5/2650",
|
||||
"base/5/2839",
|
||||
"base/5/2688",
|
||||
"base/5/2840",
|
||||
"base/5/1247_fsm",
|
||||
"base/5/3997",
|
||||
"base/5/3456_vm",
|
||||
"base/5/2667",
|
||||
"base/5/2678",
|
||||
"base/5/2696",
|
||||
"base/5/3456",
|
||||
"base/5/2228",
|
||||
"base/5/1259_fsm",
|
||||
"base/5/6106",
|
||||
"base/5/3433"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-tandoor_tandoor_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "tandoor-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"tandoor_media",
|
||||
"tandoor_postgres_data",
|
||||
"tandoor_static"
|
||||
],
|
||||
"env_keys": [
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:80/ -> 400",
|
||||
"172.23.0.3:80/ -> 400",
|
||||
"fixture Django: seed OK \u2014 tandoor: seeded superuser drill425a04"
|
||||
],
|
||||
"fixture": "fixture Django: seed OK \u2014 tandoor: seeded superuser drill425a04",
|
||||
"ports": [
|
||||
80
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"tandoor: declared volume /opt/recipes/mediafiles is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "termix",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 9,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"app",
|
||||
"etc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"html"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app/html",
|
||||
"files": [
|
||||
"sw.js"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/etc",
|
||||
"files": [
|
||||
"group-"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 17,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/lukegus/termix:2.8.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 5,
|
||||
"name": "volgate-termix_termix_data",
|
||||
"sample": [
|
||||
".env",
|
||||
"db.sqlite.encrypted",
|
||||
"opkssh/version.txt",
|
||||
"opkssh/checksum.txt",
|
||||
"opkssh/opkssh-linux-amd64"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-termix_termix_data/_data",
|
||||
"target": "/app/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "termix",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"termix_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8080/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
8080
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "uptime-kuma",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 4,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"var",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/var",
|
||||
"files": [
|
||||
"cache"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 8,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "louislam/uptime-kuma:2.5.5",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 4,
|
||||
"name": "volgate-uptimekuma_uptime_kuma_data",
|
||||
"sample": [
|
||||
"kuma.db",
|
||||
"kuma.db-shm",
|
||||
"db-config.json",
|
||||
"kuma.db-wal"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-uptimekuma_uptime_kuma_data/_data",
|
||||
"target": "/app/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "uptime-kuma",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"uptime_kuma_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3001/ -> 302"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3001
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "vaultwarden",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "vaultwarden/server:1.36.0-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 4,
|
||||
"name": "volgate-vaultwarden_vaultwarden_data",
|
||||
"sample": [
|
||||
"db.sqlite3",
|
||||
"db.sqlite3-shm",
|
||||
"rsa_key.pem",
|
||||
"db.sqlite3-wal"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-vaultwarden_vaultwarden_data/_data",
|
||||
"target": "/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "vaultwarden",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"vaultwarden_data"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_TOKEN",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SIGNUPS_ALLOWED",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:80/ -> 200"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
80
|
||||
]
|
||||
},
|
||||
"reasons": [],
|
||||
"verdict": "CLEAN"
|
||||
}
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "vikunja",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 4,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"db"
|
||||
],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"db"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/app",
|
||||
"files": [
|
||||
"vikunja"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"files"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/app/vikunja",
|
||||
"files": [
|
||||
"files"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 6,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": null,
|
||||
"image": "vikunja/vikunja:2.6.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-vikunja_vikunja_db",
|
||||
"sample": [
|
||||
"vikunja.db-wal",
|
||||
"vikunja.db",
|
||||
"vikunja.db-shm"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-vikunja_vikunja_db/_data",
|
||||
"target": "/db",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-vikunja_vikunja_data",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-vikunja_vikunja_data/_data",
|
||||
"target": "/app/vikunja/files",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "vikunja",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"vikunja_data",
|
||||
"vikunja_db"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH",
|
||||
"VIKUNJA_SERVICE_JWTSECRET"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3456/ -> 200",
|
||||
"fixture Vikunja: seed OK \u2014 vikunja: create project http=201"
|
||||
],
|
||||
"fixture": "fixture Vikunja: seed OK \u2014 vikunja: create project http=201",
|
||||
"ports": [
|
||||
3456
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"vikunja: declared volume /app/vikunja/files is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+202
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "wanderer",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 6,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"root"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".npm"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".npm"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 8,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "unhealthy",
|
||||
"image": "flomp/wanderer-web:v0.20.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-wanderer_wanderer_uploads",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_uploads/_data",
|
||||
"target": "/app/uploads",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "wanderer",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 3,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"pb_data",
|
||||
"data"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"pb_data",
|
||||
"data"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [
|
||||
{
|
||||
"added": [
|
||||
"plugins"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/data",
|
||||
"files": [
|
||||
"plugins"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_total": 3,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "flomp/wanderer-db:v0.20.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-wanderer_wanderer_plugins",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_plugins/_data",
|
||||
"target": "/data/plugins",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 6,
|
||||
"name": "volgate-wanderer_wanderer_data",
|
||||
"sample": [
|
||||
"auxiliary.db-shm",
|
||||
"data.db-wal",
|
||||
"auxiliary.db-wal",
|
||||
"auxiliary.db",
|
||||
"data.db-shm",
|
||||
"data.db"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_data/_data",
|
||||
"target": "/pb_data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "wanderer-db",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "getmeili/meilisearch:v1.36.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 11,
|
||||
"name": "volgate-wanderer_wanderer_meili_data",
|
||||
"sample": [
|
||||
"data.ms/VERSION",
|
||||
"data.ms/tasks/lock.mdb",
|
||||
"data.ms/tasks/data.mdb",
|
||||
"data.ms/auth/lock.mdb",
|
||||
"data.ms/auth/data.mdb",
|
||||
"data.ms/indexes/4e83ddf5-89a0-4d4e-9362-1fb63168a68a/lock.mdb",
|
||||
"data.ms/indexes/4e83ddf5-89a0-4d4e-9362-1fb63168a68a/data.mdb",
|
||||
"data.ms/indexes/788ef67d-3283-4fca-83ae-262af6bd7ddd/lock.mdb",
|
||||
"data.ms/indexes/788ef67d-3283-4fca-83ae-262af6bd7ddd/data.mdb",
|
||||
"data.ms/indexes/61e46453-f5a8-45b1-97ab-749e8ff8ed7e/lock.mdb",
|
||||
"data.ms/indexes/61e46453-f5a8-45b1-97ab-749e8ff8ed7e/data.mdb"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-wanderer_wanderer_meili_data/_data",
|
||||
"target": "/meili_data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "wanderer-search",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"wanderer_data",
|
||||
"wanderer_meili_data",
|
||||
"wanderer_plugins",
|
||||
"wanderer_uploads"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"MEILI_MASTER_KEY",
|
||||
"POCKETBASE_ENCRYPTION_KEY",
|
||||
"SUBDOMAIN",
|
||||
"SUBDOMAIN_DB",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.3:3000/ -> 500",
|
||||
"172.24.0.4:3000/ -> 500",
|
||||
"172.18.0.2:8090/ -> 404",
|
||||
"172.24.0.3:8090/ -> 404"
|
||||
],
|
||||
"fixture": null,
|
||||
"ports": [
|
||||
3000,
|
||||
8090
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"wanderer: unhealthy",
|
||||
"wanderer: declared volume /app/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"wanderer-db: declared volume /data/plugins is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"wanderer: this container's mounts are all empty while it created entries in ['/root'] \u2014 benign when a sibling container holds the state, worth a look when none does",
|
||||
"wanderer-db: writable-layer writes at /data (path suggests state, no database signature \u2014 judgement needed): ['plugins']"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "wger",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 0,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 0,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 1000,
|
||||
"health": "healthy",
|
||||
"image": "wger/server:2.7",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 2,
|
||||
"name": "volgate-wger_wger_data",
|
||||
"sample": [
|
||||
"database.sqlite",
|
||||
".felhom-jwt.env"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-wger_wger_data/_data",
|
||||
"target": "/home/wger/db",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-wger_wger_media",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-wger_wger_media/_data",
|
||||
"target": "/home/wger/media",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "wger",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 1000
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"wger_data",
|
||||
"wger_media"
|
||||
],
|
||||
"env_keys": [
|
||||
"ADMIN_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SECRET_KEY",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:8000/ -> 302",
|
||||
"fixture Wger: seed OK \u2014 wger: POST /api/v2/weightentry/ http=201"
|
||||
],
|
||||
"fixture": "fixture Wger: seed OK \u2014 wger: POST /api/v2/weightentry/ http=201",
|
||||
"ports": [
|
||||
8000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"wger: declared volume /home/wger/media is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+173
@@ -0,0 +1,173 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "wishlist",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 40,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 2,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"root",
|
||||
"usr"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
".config",
|
||||
".local"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root",
|
||||
"files": [
|
||||
".config",
|
||||
".local"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"caddy",
|
||||
"prisma-nodejs"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.config",
|
||||
"files": [
|
||||
"caddy",
|
||||
"prisma-nodejs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"autosave.json"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.config/caddy",
|
||||
"files": [
|
||||
"autosave.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"commands.json"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.config/prisma-nodejs",
|
||||
"files": [
|
||||
"commands.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"share"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/root/.local",
|
||||
"files": [
|
||||
"share"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr",
|
||||
"files": [
|
||||
"src"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/src",
|
||||
"files": [
|
||||
"app"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"data",
|
||||
"uploads"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/usr/src/app",
|
||||
"files": [
|
||||
"data",
|
||||
"uploads"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 50,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/cmintey/wishlist:v0.67.1",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-wishlist_wishlist_uploads",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-wishlist_wishlist_uploads/_data",
|
||||
"target": "/usr/src/app/uploads",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 3,
|
||||
"name": "volgate-wishlist_wishlist_data",
|
||||
"sample": [
|
||||
"prod.db-shm",
|
||||
"prod.db",
|
||||
"prod.db-wal"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-wishlist_wishlist_data/_data",
|
||||
"target": "/usr/src/app/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "wishlist",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"wishlist_data",
|
||||
"wishlist_uploads"
|
||||
],
|
||||
"env_keys": [
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 307",
|
||||
"fixture Wishlist: seed OK \u2014 wishlist: /signup http=200 type=success"
|
||||
],
|
||||
"fixture": "fixture Wishlist: seed OK \u2014 wishlist: /signup http=200 type=success",
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"wishlist: declared volume /usr/src/app/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
+176
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"probe": {
|
||||
"app": "zipline",
|
||||
"containers": [
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"zipline"
|
||||
]
|
||||
},
|
||||
{
|
||||
"added": [
|
||||
"public",
|
||||
"uploads"
|
||||
],
|
||||
"changed_count": 0,
|
||||
"db_signature": false,
|
||||
"dir": "/zipline",
|
||||
"files": [
|
||||
"public",
|
||||
"uploads"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 3,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 0,
|
||||
"health": "healthy",
|
||||
"image": "ghcr.io/diced/zipline:4.8.0",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-zipline_zipline_uploads",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-zipline_zipline_uploads/_data",
|
||||
"target": "/zipline/uploads",
|
||||
"writable_by_app": "yes"
|
||||
},
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 0,
|
||||
"name": "volgate-zipline_zipline_public",
|
||||
"sample": [],
|
||||
"source": "/var/lib/docker/volumes/volgate-zipline_zipline_public/_data",
|
||||
"target": "/zipline/public",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "zipline",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 0
|
||||
},
|
||||
{
|
||||
"diff_added": 2,
|
||||
"diff_benign_db_touches": [],
|
||||
"diff_data_dirs": [],
|
||||
"diff_other_dirs": [
|
||||
{
|
||||
"added": [],
|
||||
"changed_count": 1,
|
||||
"db_signature": false,
|
||||
"dir": "/",
|
||||
"files": [
|
||||
"run"
|
||||
]
|
||||
}
|
||||
],
|
||||
"diff_token_dirs": [],
|
||||
"diff_total": 4,
|
||||
"diff_unresolved": [],
|
||||
"exit": 0,
|
||||
"gid": 70,
|
||||
"health": "healthy",
|
||||
"image": "postgres:16-alpine",
|
||||
"mounts": [
|
||||
{
|
||||
"class": "named-declared",
|
||||
"files": 1435,
|
||||
"name": "volgate-zipline_zipline_postgres_data",
|
||||
"sample": [
|
||||
"pg_ident.conf",
|
||||
"pg_hba.conf",
|
||||
"postmaster.pid",
|
||||
"postgresql.conf",
|
||||
"PG_VERSION",
|
||||
"postgresql.auto.conf",
|
||||
"postmaster.opts",
|
||||
"base/5/2612",
|
||||
"base/5/1418",
|
||||
"base/5/6117",
|
||||
"base/5/2655",
|
||||
"base/5/3609",
|
||||
"base/5/2662",
|
||||
"base/5/2683",
|
||||
"base/5/2832",
|
||||
"base/5/2679",
|
||||
"base/5/2608_vm",
|
||||
"base/5/2673",
|
||||
"base/5/2690",
|
||||
"base/5/2336",
|
||||
"base/5/2754",
|
||||
"base/5/2701",
|
||||
"base/5/4168",
|
||||
"base/5/2650",
|
||||
"base/5/2839",
|
||||
"base/5/2688",
|
||||
"base/5/2840",
|
||||
"base/5/1247_fsm",
|
||||
"base/5/3997",
|
||||
"base/5/3456_vm",
|
||||
"base/5/2667",
|
||||
"base/5/2678",
|
||||
"base/5/2696",
|
||||
"base/5/3456",
|
||||
"base/5/2228",
|
||||
"base/5/1259_fsm",
|
||||
"base/5/6106",
|
||||
"base/5/3433",
|
||||
"base/5/4150",
|
||||
"base/5/3606"
|
||||
],
|
||||
"source": "/var/lib/docker/volumes/volgate-zipline_zipline_postgres_data/_data",
|
||||
"target": "/var/lib/postgresql/data",
|
||||
"writable_by_app": "yes"
|
||||
}
|
||||
],
|
||||
"name": "zipline-postgres",
|
||||
"restarts": null,
|
||||
"status": "running",
|
||||
"uid": 70
|
||||
}
|
||||
],
|
||||
"declared_volumes": [
|
||||
"zipline_postgres_data",
|
||||
"zipline_public",
|
||||
"zipline_uploads"
|
||||
],
|
||||
"env_keys": [
|
||||
"CORE_SECRET",
|
||||
"DB_PASSWORD",
|
||||
"DOMAIN",
|
||||
"HDD_PATH",
|
||||
"IMPORT_PATH",
|
||||
"SUBDOMAIN",
|
||||
"TZ",
|
||||
"USERDATA_PATH"
|
||||
],
|
||||
"exercise": [
|
||||
"172.18.0.2:3000/ -> 301",
|
||||
"172.25.0.3:3000/ -> 301",
|
||||
"fixture Zipline: seed OK \u2014 zipline: /api/setup http=200 :: {\"firstSetup\":false,\"user\":{\"id\":\"ay6n2g4wkn7i2kkg6dvag03n\",\"username\":\"drill52906a\",\"createdAt\":\"2026-10-02T14:18:38.794Z\","
|
||||
],
|
||||
"fixture": "fixture Zipline: seed OK \u2014 zipline: /api/setup http=200 :: {\"firstSetup\":false,\"user\":{\"id\":\"ay6n2g4wkn7i2kkg6dvag03n\",\"username\":\"drill52906a\",\"createdAt\":\"2026-10-02T14:18:38.794Z\",",
|
||||
"ports": [
|
||||
3000
|
||||
]
|
||||
},
|
||||
"reasons": [
|
||||
"zipline: declared volume /zipline/uploads is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"zipline: declared volume /zipline/public is EMPTY after the exercise \u2014 the app was not shown to write where the template preserves it",
|
||||
"zipline: this container's mounts are all empty while it created entries in ['/zipline'] \u2014 benign when a sibling container holds the state, worth a look when none does"
|
||||
],
|
||||
"verdict": "UNDETERMINED"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
# papra diagnosis 2026-10-02 ~14:30Z, bench 9401: docker run ghcr.io/papra-hq/papra:26.6.2-rootless, named volume at /app/app-data, dummy AUTH_SECRET, 60 s each; first with --memory 256m (the template's limit), then no limit
|
||||
=== memory=256m
|
||||
status=exited exit=137 oomkilled=true restarts=0
|
||||
mem=0B / 0B
|
||||
$ pnpm migrate:up:prod && pnpm start
|
||||
$ tsx src/scripts/migrate-up.script.ts
|
||||
Killed
|
||||
/var/lib/docker/volumes/diagpapra-256m/_data:
|
||||
db
|
||||
documents
|
||||
|
||||
/var/lib/docker/volumes/diagpapra-256m/_data/db:
|
||||
|
||||
/var/lib/docker/volumes/diagpapra-256m/_data/documents:
|
||||
=== memory=0
|
||||
status=running exit=0 oomkilled=false restarts=0
|
||||
mem=415.6MiB / 12GiB
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951362359,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-expire-invitations","taskName":"expire-invitations","
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790951362359,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expired
|
||||
{"level":"info","message":"Found expired soft-deleted organizations to purge","timestampMs":1790951362360,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","organ
|
||||
{"level":"info","message":"Purged expired soft-deleted organizations","timestampMs":1790951362360,"namespace":"organizations:tasks:purgeExpiredOrganizations","data":{"processMode":"all","purgedOrganiz
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951362361,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-organizations","taskName":"purge-expire
|
||||
{"level":"debug","message":"Consuming job","timestampMs":1790951362361,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-kv
|
||||
{"level":"info","message":"Purged expired kv-store entries","timestampMs":1790951362362,"namespace":"kv-store:tasks:purgeExpiredEntries","data":{"processMode":"all","deletedCount":0}}
|
||||
{"level":"info","message":"Job rescheduled","timestampMs":1790951362363,"namespace":"tasks:services","data":{"processMode":"all","jobId":"periodic-purge-expired-kv-entries","taskName":"purge-expired-k
|
||||
/var/lib/docker/volumes/diagpapra-0/_data:
|
||||
db
|
||||
documents
|
||||
|
||||
/var/lib/docker/volumes/diagpapra-0/_data/db:
|
||||
db.sqlite
|
||||
|
||||
/var/lib/docker/volumes/diagpapra-0/_data/documents:
|
||||
@@ -0,0 +1,54 @@
|
||||
+ date -u
|
||||
Fri Oct 2 14:31:30 UTC 2026
|
||||
+ pct list
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
9401 running volgate-sweep
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19536760 18829500 48.29%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 134196284 799156804 13.65%
|
||||
+ pct exec 9401 -- bash -c 'docker logout 2>&1 | tail -1; ls /root/.docker/config.json 2>&1; docker ps -a --format {{.Names}} | wc -l; docker volume ls -q | grep -c ^volgate; docker volume ls -q | wc -l; docker image ls --format {{.Repository}}:{{.Tag}}'
|
||||
Removing login credentials for https://index.docker.io/v1/
|
||||
/root/.docker/config.json
|
||||
0
|
||||
0
|
||||
3
|
||||
felhom-volgate-canary:1
|
||||
+ pct stop 9401
|
||||
+ pct destroy 9401 --purge
|
||||
purging CT 9401 from related configurations..
|
||||
+ pct list
|
||||
VMID Status Lock Name
|
||||
9201 running demo-hp
|
||||
9202 running demo-hp-scratch
|
||||
+ pct config 9401
|
||||
+ head -1
|
||||
Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist
|
||||
+ ls /mnt/hdd_1/images/
|
||||
9202
|
||||
+ pvesm status
|
||||
Name Type Status Total (KiB) Used (KiB) Available (KiB) %
|
||||
felhom-pbs pbs active 0 0 0 0.00%
|
||||
local dir active 40453376 19536688 18829572 48.29%
|
||||
local-lvm lvmthin active 56487936 34954734 21533201 61.88%
|
||||
nvme-scratch dir active 983379700 77370636 855982452 7.87%
|
||||
+ rm -f /root/volgate-create.sh
|
||||
+ ls /root/volgate-teardown.sh /root/du /root/dp
|
||||
ls: cannot access '/root/du': No such file or directory
|
||||
ls: cannot access '/root/dp': No such file or directory
|
||||
/root/volgate-teardown.sh
|
||||
ls: cannot access '/root/volgate-teardown.sh': No such file or directory
|
||||
|
||||
# Teardown statement, 2026-10-02 ~14:32Z
|
||||
# machine: bench LXC 9401 (volgate-sweep) — docker logout done, 0 containers, 0 volgate-* volumes, 3 anonymous
|
||||
# image volumes + the canary image left inside it, all removed with the rootfs by `pct destroy 9401 --purge`.
|
||||
# host: demo-hp — `pct list` shows only 9201 + 9202 (both untouched all session); no 9401 config; /mnt/hdd_1/images/
|
||||
# holds only 9202; nvme-scratch used 77370516 KiB before create -> 77370636 KiB after destroy (+120 KiB, back to
|
||||
# baseline). local-lvm never used (34954734 KiB before and after). Helper scripts and credential files removed from
|
||||
# /root on demo-hp; the Docker Hub credential files were shredded on DooPlex, demo-hp and in the bench right after login.
|
||||
# hub: untouched (nothing provisioned there).
|
||||
# no prune of any kind anywhere; nothing committed or pushed in any repo; catalog-wt copy not modified.
|
||||
@@ -899,7 +899,7 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server`
|
||||
| **R-785** | **[P3-LOW] SparkyFitness is pinned 11 releases and a major behind upstream (v0.17.3; upstream v1.7.3, v1.6.0 dated 2026-07-24).** READ 2026-10-01 (`audits/visitors-2026-10-01/C/bench/C1-previous-tag.txt`). **Needs:** an update walk 0.17 → 1.x through the ladder (bench + box), after R-784 is decided. | **OPEN — rank P3-LOW; owner: CC (after R-784)** |
|
||||
| **R-786** | **[P3-LOW] SparkyFitness's onboarding record has six open rows** (`app-catalog-felhom.eu/onboarding/sparkyfitness.md`): 0.5 runtime internet (food search providers), 0.7 the phone app's sign-in route through traefik, 1.6 the env names the server reads, 1.7 the entrypoint read, 5.4 a second memory watch at another limit, 8.3 no logo/screenshots on felhom.eu (404). Everything else measured this session (bench + 9202). **Needs:** each row measured, or n/a with a reason. | **READY — rank P3-LOW; owner: CC (catalog)** |
|
||||
| **R-787** | **[P2-MEDIUM] No catalog app's LICENCE has been checked against Felhom being a paid service; the first look (SparkyFitness, R-784) found a non-commercial-only licence.** The new-app checklist row 0.1 binds apps opened from 2026-10-01; the 53 exempt apps were never read. **Needs:** a read of every template's licence at its pinned tag (SPDX + any custom terms), one table, and the non-open ones to the operator. **UPDATE 2026-10-02 — READ:** all 58 templates (56 published + Grimmory + MeTube), every image, at the pinned tag — one table: `audits/licences-2026-10-02/TABLE.md` (method in `read-1.md`, `read-2.md`). OSI-approved: all but the rows below. Not OSI / limiting, each now its own row: Tandoor (Commons Clause, R-789), Emby (R-790), n8n (R-791), Plex (R-792), the EE/BUSL parts of Cal.com, Docmost, Outline and meilisearch (R-793), redis 7.4 in seven apps (R-794), recipe-importer has no licence file (R-795); SparkyFitness is R-784. Nothing was hidden or changed because of the read (the brief's rule). New apps carry their licence in record row 0.1. | **CLOSED 2026-10-02 — the read (decisions are R-784, R-789..R-795)** |
|
||||
| **R-788** | **[P3-LOW] The volume-persistence gate reads an EMPTY declared volume as CLEAN — MeTube's `/state` passed while the app had written nothing there.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/C-metube-bench/C2-volume-persistence-metube.txt`): "declared volume /state is EMPTY" → exit 0. The catalog's CLAUDE.md says an app that wrote nothing is UNDETERMINED (exit 2), never a pass. MeTube's real proof came from elsewhere (the history read back after a recreate and after a restore). **Needs:** the gate treats an empty declared volume as undecided, or the app gets an exerciser (MeTube: one `POST /add`); a decoy that is an app writing nothing. **UPDATE 2026-10-02:** part of the cause was R-801 (no port → no exercise at all); the catalog now also has `APP_EXERCISE` (MeTube: one `POST /add`). The empty-volume → CLEAN path itself is still to be checked. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-788** | **[P3-LOW] The volume-persistence gate reads an EMPTY declared volume as CLEAN — MeTube's `/state` passed while the app had written nothing there.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/C-metube-bench/C2-volume-persistence-metube.txt`): "declared volume /state is EMPTY" → exit 0. The catalog's CLAUDE.md says an app that wrote nothing is UNDETERMINED (exit 2), never a pass. MeTube's real proof came from elsewhere (the history read back after a recreate and after a restore). **Needs:** the gate treats an empty declared volume as undecided, or the app gets an exerciser (MeTube: one `POST /add`); a decoy that is an app writing nothing. **UPDATE 2026-10-02:** part of the cause was R-801 (no port → no exercise at all); the catalog now also has `APP_EXERCISE` (MeTube: one `POST /add`). The empty-volume → CLEAN path itself is still to be checked. **DONE 2026-10-02:** an empty declared volume after the exercise is UNDETERMINED (red-proofed: `audits/persistence-sweep-2026-10-02/A/RP-R788-empty-volume.txt`); the gate calls the app's own upgrade-fixture seed when a volume stays empty. Bind mounts: R-805. | **CLOSED 2026-10-02 — catalog** |
|
||||
| **R-789** | **[P2-MEDIUM] Tandoor's licence is AGPL-3.0 WITH the Commons Clause: it forbids selling "a product or service whose value derives, entirely or substantially, from the functionality of the Software" — fees for hosting or support included.** READ 2026-10-02 at 2.6.15 (`audits/licences-2026-10-02/TABLE.md`). Felhom charges for installing and caring for the household's apps; whether that value comes "substantially" from Tandoor is the question. **Needs (operator):** keep (the fee is for the box, not Tandoor), hide for new installs, or ask the authors. Nothing changed meanwhile. **RULED 2026-10-02 afternoon (`09` §3 decision 66):** treated like SparkyFitness — stays offered; the operator asks the authors for written permission; without it before the first paying customer Tandoor is hidden (`lifecycle: hidden`). STATUS "Before the first paying customer". | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (the request; trigger: first paying customer)** |
|
||||
| **R-790** | **[P2-MEDIUM] Emby is proprietary: a personal, non-commercial, non-transferable licence.** READ 2026-10-02 (emby.media/terms.html; `audits/licences-2026-10-02/TABLE.md`). The household's private use fits; Felhom installs the official image from Emby (no copy distributed) as part of a paid service, a context the licence does not cover. Jellyfin (GPL) offers the same. **Needs (operator):** keep, hide, or ask Emby. **RULED 2026-10-02 afternoon (`09` §3 decision 66):** KEPT — the household is the licensee; Felhom installs the official, unchanged image. Part of the lawyer's review (R-802). | **CLOSED 2026-10-02 — operator ruling (kept)** |
|
||||
| **R-791** | **[P3-LOW] n8n's Sustainable Use License allows own internal or personal use, and distribution only free of charge for non-commercial purposes.** READ 2026-10-02 at 2.42.1 (`audits/licences-2026-10-02/TABLE.md`). The household's own use is allowed; Felhom pulling the unchanged official image onto the household's box is arguably not distributing — a grey zone. **Needs (operator):** keep (recommended reading) or ask n8n. **RULED 2026-10-02 afternoon (`09` §3 decision 66):** KEPT — the household is the user; the official, unchanged image. Part of the lawyer's review (R-802). | **CLOSED 2026-10-02 — operator ruling (kept)** |
|
||||
@@ -912,8 +912,13 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server`
|
||||
| **R-798** | **[P3-LOW] Grimmory's template sets `SWAGGER_ENABLED=false`, which v3.5.0 does not read (it reads `API_DOCS_ENABLED`, default false).** READ 2026-10-02 (`audits/family-gate-2026-10-02/B/grimmory-reads/upstream-v3.5.0.txt`). Harmless today — the API docs are off by default. **Needs:** remove the dead line or set the right name, on the next Grimmory step. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-799** | **[P3-LOW] The MeTube fixture's `POST /add` leaves out `download_type`, which upstream's validator lists as required.** MEASURED 2026-10-02 (`audits/family-gate-2026-10-02/C-metube-bench/`): both 2026.09.28 and .29 answered 200 and downloaded anyway. Fragile if a later tag enforces it. **Needs:** add `download_type: video` to the fixture with the next MeTube step. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-800** | **[P2-MEDIUM] "Delete your data from the hard drive" keeps the app's files in the household's userdata folder — and neither the dialog nor the result says so.** MEASURED 2026-10-02. On demo-hp (live catalog, `audits/family-gate-2026-10-02/B4/grimmory-demo.txt`, `metube-demo.txt`): remove WITH data removed Grimmory's database volume, appdata and backups but KEPT the uploaded EPUB in `userdata/media/grimmory`; for MeTube the dialog offers no data checkbox at all and the result says "the app stored no data of its own on a drive" while the downloaded video stays in `userdata/media/metube`. On 9202 "keeping data" answers `hdd_paths_preserved: []` for the same reason (`audits/family-gate-2026-10-02/B/box/life.txt`): the remove reads `${HDD_PATH}` binds only. The model behind it may be right — userdata is the household's own files (a shared `media/` tree must never go with one app) — but then the dialog must say the files stay and where. **Needs (operator):** keep userdata on remove (and say so on the dialog), or delete an app's OWN userdata subfolder when the household ticks the box. **RULED 2026-10-02 afternoon (`09` §3 decision 67, option A):** the household's userdata files stay on every remove; the dialog and the result say so and name the folder. Recorded in `07` §6.5. Built in the next controller release. | **READY — rank P2-MEDIUM; owner: CC (the dialog and the result text)** |
|
||||
| **R-801** | **[P2-MEDIUM] The volume-persistence gate never sent a request to ANY app: it read the routed port from label VALUES while `docker compose config --format json` puts the port in the label NAME.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/B/volume-persistence-metube-exerciser-diag.txt`: `"ports": []`, `"exercise": []` for MeTube; the label shape read on Compose 2.26.1). So every verdict since the gate exists came only from what an app writes at start by itself; the GET exercise and the deep second pass never ran. **Fixed in the catalog** (`routed_ports()`, key=value; unit tests, red-proofed: `audits/family-gate-2026-10-02/B/RP-R801-routed-ports.txt`). **Still owed:** a full re-sweep of all 58 templates on the bench with the fixed gate — an app whose data path is written only on a request may now read differently. | **READY — rank P2-MEDIUM; owner: CC (the re-sweep)** |
|
||||
| **R-801** | **[P2-MEDIUM] The volume-persistence gate never sent a request to ANY app: it read the routed port from label VALUES while `docker compose config --format json` puts the port in the label NAME.** MEASURED 2026-10-02 on the bench (`audits/family-gate-2026-10-02/B/volume-persistence-metube-exerciser-diag.txt`: `"ports": []`, `"exercise": []` for MeTube; the label shape read on Compose 2.26.1). So every verdict since the gate exists came only from what an app writes at start by itself; the GET exercise and the deep second pass never ran. **Fixed in the catalog** (`routed_ports()`, key=value; unit tests, red-proofed: `audits/family-gate-2026-10-02/B/RP-R801-routed-ports.txt`). **Still owed:** a full re-sweep of all 58 templates on the bench with the fixed gate — an app whose data path is written only on a request may now read differently. **DONE 2026-10-02:** the re-sweep of all 58 ran with the fixed gate (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): CLEAN 39 · UNDETERMINED 19 · BROKEN 0 (August: 38 · 11 · 4 of 53, every one of those decided by start-time writes alone — 0 of 53 probes had sent a request). Follow-ups R-805..R-807. | **CLOSED 2026-10-02 — catalog (the fixed gate + the re-sweep)** |
|
||||
| **R-802** | **[P2-MEDIUM] A lawyer reviews the non-OSI licence list before the first paying customer.** Operator ruling 2026-10-02 (`09` §3 decision 66): Tandoor (R-789), SparkyFitness (R-784), Emby, n8n, Plex (kept — R-790..R-792), the EE/BUSL parts (R-793), redis 7.4 (R-794); the table is `audits/licences-2026-10-02/TABLE.md`. STATUS "Before the first paying customer". | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (trigger: first paying customer)** |
|
||||
| **R-803** | **[P1-HIGH] papra cannot start under its own memory limit: a fresh install is OOM-killed in its migration and crash-loops.** MEASURED 2026-10-02 on the bench (`audits/persistence-sweep-2026-10-02/A/sweep/papra-oom-diagnosis.txt`, `audits/persistence-sweep-2026-10-02/A/sweep/batch-09-papra-rerun.txt`): `ghcr.io/papra-hq/papra:26.6.2-rootless` at the template's 256M → `OOMKilled=true` during `tsx src/scripts/migrate-up.script.ts`; with no limit it runs at ~416 MiB after 60 s, and its database lands correctly in `/app/app-data` (the R-156 mount is right). The 26.6.1 → 26.6.2 step was proven with harness v1 (no memory watch), which is how 256M stayed. **No box runs papra** (demo-hp, demo-felhom read 2026-10-02). **Needs:** a from-birth memory watch, then the limit raised with headroom, proven on the bench (install, seed, read back, persistence CLEAN). **FIXED 2026-10-02:** measured from birth on the bench (`audits/persistence-sweep-2026-10-02/A/papra/SUMMARY.md`): peak anon 405 MiB (cgroup peak 483 MiB), ~255 MiB idle; the limit is now 768M (`mem_request` 256M); at 768M healthy in 31 s, 0 kills, the seed read back, persistence CLEAN. No image move; no box ran papra. | **CLOSED 2026-10-02 — catalog (papra 768M)** |
|
||||
| **R-804** | **[P3-LOW] plant-it's image is gone from Docker Hub: `msdeluise/plant-it:0.10.0` answers "pull access denied … repository does not exist".** MEASURED 2026-10-02 on the bench, logged in (`audits/persistence-sweep-2026-10-02/A/sweep/batch-*.txt`, plant-it). The app is already `lifecycle: abandoned` (not offered for new installs); a box that runs it could no longer reinstall or restore it from images. **No box runs it** (read 2026-10-02). **Needs (operator):** keep the abandoned template as it is, or hide it entirely. | **WAITING-ON-OPERATOR — rank P3-LOW; owner: operator** |
|
||||
| **R-805** | **[P3-LOW] The volume-persistence gate judges an empty NAMED volume (R-788) but not an empty BIND mount.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): Grimmory's `/app/data` bind held 0 files and read CLEAN (its state is in MariaDB); komga, paperless-ngx, radarr and sonarr also carry empty binds that are not judged. **Needs:** decide whether an empty bind after the exercise is UNDETERMINED like a named volume, with a decoy. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-806** | **[P3-LOW] The gate's GET exercise speaks plain http to an HTTPS backend (crafty-controller :8443), and gramps-web did not answer on :5000.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): both reached data only through their fixture seed. **Needs:** read the `loadbalancer.server.scheme` label (upgrade_boxport already does); find why gramps-web's first GET got no answer. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-807** | **[P3-LOW] 13 apps stay UNDETERMINED because their seeds write only to the database, so their upload / media / cache / redis volumes stay empty.** MEASURED 2026-10-02 (`audits/persistence-sweep-2026-10-02/A/sweep/TABLE.md`): claper, crafty-controller, dawarich (redis), docmost, gramps-web, immich (ML cache), outline (+redis), sparkyfitness, tandoor, vikunja, wger, wishlist, zipline — plus plex (no seed route: a plex.tv claim token) and wanderer (no fixture; unhealthy under the gate). None is BROKEN: nothing was written outside a preserved folder. **Needs:** per app, a seed that uploads one file (or the volume named n/a with a reason: a redis cache, an ML model cache). | **READY — rank P3-LOW; owner: CC** |
|
||||
|
||||
<!-- DUE-CHECKS-BEGIN — machine-readable. Parsed by scripts/due_checks_gate.py.
|
||||
One row per dated check. The R-number must have a row above. Dates are UTC.
|
||||
|
||||
Reference in New Issue
Block a user