More apps update themselves at night (30+2 -> 35+3); the same-name security-fix gap measured (R-740, decision for the operator)
gates / gates (push) Successful in 29s

- Twelve steps published on both venues (catalog): first ladders for calibre-web, gitea, wger,
  crafty-controller, uptime-kuma, zipline (two steps); within-major emby, ghost, home-assistant,
  outline, rallly. immich's step v3.0.3 -> v3.2.2 re-proven at 768M (Part D).
- Part C: the night leg skips a digest-only change AND the catalog never records a same-tag re-test,
  so a same-name upstream fix reaches no box. Row R-740; the decision in STATUS; `09` decision 30
  carries a dated note (the decision itself unchanged).
- Rows: 369 -> 377. Opened R-735..R-742; closed R-735, R-738, R-742; narrowed R-462, R-624, R-446,
  R-440, R-734, R-732. The currency audit gains §1b (and corrects its 31+1 to 30+2).

Evidence: documentation/audits/more-night-apps-2026-09-30/. Report: REPORT-more-night-apps-2026-09-30.md.

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:
2026-09-30 20:27:28 +02:00
parent 2866f6a318
commit 42bf40bd2c
331 changed files with 25953 additions and 25 deletions
+14
View File
@@ -16,6 +16,20 @@
> and holds nothing of its own; this file does hold its own content, namely the standing rulings below. > and holds nothing of its own; this file does hold its own content, namely the standing rulings below.
> **2026-09-30 (evening) — more night-updatable apps; the same-name fix gap measured (R-740, operator decision).**
> Catalog: first ladders for calibre-web, gitea (its installer form, R-624), wger, crafty-controller, uptime-kuma, zipline
> (4.6.1 → 4.7.0 → 4.8.0 — 4.8.0 refuses a database that skipped 4.7.x, R-742; the box UNDID the direct jump by itself);
> within-major steps emby, ghost, home-assistant, outline, rallly. Night (a) 30 + 2 → 34 + 3 (calibre-web conditional:
> its library `metadata.db` changes). wger ran no migrations on update → login 500 behind a `done` Update; fixed in the
> template (`DJANGO_PERFORM_MIGRATIONS=True`, R-738 closed). immich's step 0b82… re-proven at 768M and rewritten by the
> new `upgrade-test.py --restep` (Part D). Harness: 5 fixtures, HTTPS backends on the bench, per-file names behind
> `files_may_change`, bench `password:N:special` (R-735 closed). **Part C (R-740):** the night leg skips a digest-only
> change (`unattended.go:433–435`), AND the catalog never records a same-tag re-test (writer refuses "nothing moves"), so a
> same-name upstream fix reaches no box; a unit walk shows the leg WOULD take a same-tag re-test entry with no controller
> change. `09` decision 30 carries a dated note. New rows R-736 (images never deleted → disk fills), R-737 (wger app-login
> 500, no JWT key), R-739 (bench cannot run wanderer), R-741 (after_install's default-login window, measured 1–18 s).
> Evidence: `documentation/audits/more-night-apps-2026-09-30/`. Report: `REPORT-more-night-apps-2026-09-30.md`.
> **2026-09-30 (late afternoon) — immich's first start (R-732 CLOSED).** Cause measured: the first-start geodata import > **2026-09-30 (late afternoon) — immich's first start (R-732 CLOSED).** Cause measured: the first-start geodata import
> runs up to 9 concurrent 5000-row INSERTs; the database needs ~400 MB anon + ~170 MB touched shared_buffers (the image's > runs up to 9 concurrent 5000-row INSERTs; the database needs ~400 MB anon + ~170 MB touched shared_buffers (the image's
> fixed 512MB) — over a 512M limit without swap (bench: 61–104 kills), survivable only by swapping (9202). An update that > fixed 512MB) — over a 512M limit without swap (bench: 61–104 kills), survivable only by swapping (9202). An update that
+56
View File
@@ -0,0 +1,56 @@
# REPORT — more apps that update themselves (2026-09-30, evening, by day)
Evidence: `documentation/audits/more-night-apps-2026-09-30/` (README there has the per-app table). Architecture read:
`architecture/09-update-architecture.md` §3 decisions 6, 13, 14, 17, 22, 30, §6.4 parts 4–7, §6.5.
## The Part table
| Part | done / not done / changed | why |
|---|---|---|
| **A1 calibre-web** | **done** — v4.0.6 → v4.0.8, first ladder `53a4a1d` | front door = the Upload button (HTTP form), read back through OPDS + the served EPUB. The ingest folder was NOT used (it would be a file planted in a mount). `files_may_change`: the library DB `metadata.db` (+`-shm`, `-wal`) in the books folder; the book file did not change |
| **A2 gitea** | **done** — 1.27.0 → 1.27.3, first ladder `d7ba60c` | the installer-form POST (no CSRF on that form), through the setup gate on the box. 28.0.0 not touched |
| **B1 emby, ghost, home-assistant** | **done** — `3e4aa77`, `9a78e3b`, `15f4d59` | each had a newer tag inside its line (re-checked) |
| **B2 uptime-kuma, wger, crafty-controller** | **done** — `35dd5cf`, `4ad32aa` (+ fix `7a4ff48`), `e1f0179` | new fixtures; wger needed a template fix first (R-738) |
| **B2 wanderer** | **not done** | the bench cannot run it at all: its web server calls the DB at a public https name (R-739). The meilisearch question is NOT measured |
| **B3 time left** | **done** — outline `b0b2514`, rallly `8d3a35a`, zipline 4.6.1 → 4.7.0 `a9700e2` → 4.8.0 `fb87030` | zipline 4.8.0 refuses a database that skipped 4.7.x (R-742); the box undid the direct jump itself |
| **C the same-name fix gap** | **done** — row R-740, STATUS decision, `09` decision 30 dated note | measured from source, a unit walk, the registry and demo-hp; **nothing built** |
| **D immich's older step** | **done (changed)** — re-proven at 768M, step files rewritten `48440ce` | the brief's route needed a writer mode that did not exist → `upgrade-test.py --restep` `63a96b0`, with tests |
**Night-updatable apps (the audit's method (a)): 30 + 2 conditional at the start → 35 + 3 conditional** (38 carry a proven step; 15 have no ladder).
## Claims in the brief that turned out wrong
1. **"Night-updatable: 31 (+ nextcloud conditional)"** — at the session's start it was **30 + 2 conditional**: the
afternoon's immich step carries `files_may_change` (R-734), so immich counts as conditional.
2. **"Register 366 rows"** — **369**: the afternoon session added R-732..R-734 after STATUS said 366.
3. **"calibre-web and gitea have no ladder"** — true.
4. **"gitea's fixture fails at the installer"** — true (`MustInstalled`); the installer form works headless.
5. **"The leg never presses a digest-only change"** — true (`unattended.go:433–435`). But the larger fact is that the
catalog never records a same-tag re-test at all, so the Update button does not deliver it either (R-740).
6. **"Decision 30's text says the leg would"** — true: „until someone (or the automatic leg) presses Update".
7. **"immich's 0b82… step pins 512M"** — true. **"The writer rewrites the step file"** — it could not (it writes a
step file only once, when a step is superseded); `--restep` was added.
8. **"No real box runs immich v3.0.3"** — true and stronger: no box reporting to the hub runs immich at all
(hub `/apps`, positive control bookstack = 2 deployments).
9. **"wger: behind inside the major"** and **"crafty/uptime-kuma/wanderer need a new fixture"** — true; wanderer
cannot be run on the bench at all.
## Rows
Before **369**, after **377**. Opened: R-735 (bench password shape — closed), R-736 (old images never deleted),
R-737 (wger app-login 500), R-738 (wger migrations — closed), R-739 (bench cannot run wanderer), R-740 (same-name fix —
decision), R-741 (after_install default-login window), R-742 (zipline needs 4.7.x first — closed). Narrowed: R-462, R-624, R-446,
R-440, R-734, R-732 (note). Closed: R-735, R-738, R-742.
## Teardown
Three layers:
- **Machine.** Scratch guest 9202: every app this session installed removed through the product (calibre-web twice,
gitea, emby, ghost, home-assistant, wger ×3, crafty-controller, uptime-kuma, outline, rallly, zipline ×3); their images
and older drill leftovers removed **by name** (53 GB freed at 17:43 when the disk refused an install — R-736); pointed
back at the live catalog and its `update:` override removed (`box/T6`, `repo_url` read back); the same six containers
run as at the start. Bench LXC 9401: evidence copied off after every run, its images removed by name once (disk full),
then destroyed with its template (`bench/B9`). Drill catalog: force-reset to live `main` `fb87030` (operator-allowed),
image lines identical (`box/T7`).
- **Host.** demo-hp: `pct list` shows 9201 and 9202 only, as at the start.
- **Hub.** Read only (`/hosts`, `/apps`); nothing provisioned.
+57 -19
View File
@@ -2,27 +2,65 @@
**Ready for the first real tester (Tester-2): yes. You confirmed the tunnel route and the connect mails (2026-09-30).** **Ready for the first real tester (Tester-2): yes. You confirmed the tunnel route and the connect mails (2026-09-30).**
**Updated 2026-09-30 (late afternoon). Both demo boxes run controller 0.283.1 and host agent 0.138.0. Hub 0.126.0. New installs get golden 0.283.1 with agent 0.138.0. No new release today.** **Updated 2026-09-30 (evening). Both demo boxes run controller 0.283.1 and host agent 0.138.0. Hub 0.126.0. New installs get golden 0.283.1 with agent 0.138.0. No controller, agent or hub release today.**
**Tester-2 — read only, from the hub.** **Tester-2 — read only, from the hub.** The customer record exists. Tester-2's box has not registered yet, so there are no apps to read.
- The customer record exists and its settings are ready.
- **Tester-2's box has not registered yet.** So there are no apps and no update switch to read.
- When Tester-2 installs an app, the box updates it at night by itself, like the demo boxes.
**Decisions today:** none taken by me. The "seed test data through the database" choice was **not needed**, so it is not recorded. ## One decision for you
**What I did, and it worked.** **Question: should a box also take, at night, a security fix that the app's maker ships under the same name?**
- **The last six database apps are decided.** Three moved to the newer database version (rallly, outline, sparkyfitness). Each was tested on the test bench and on the scratch box, and each one's automatic undo was tested too. Three stay where they are (zipline, adventurelog, immich), because their makers use the same or an older version. **All eleven database apps are now done.** Database images like `postgres:18-alpine` or `redis:7-alpine` get fixes without a new name. Seven of the eight such names
- **More apps can update themselves at night:** 31 apps (plus nextcloud when a full copy exists), up from 28 this morning. Seven more apps got a newer version today, each tested on the bench and on the scratch box: bookstack, kimai, audiobookshelf, n8n, navidrome, grafana, komga. we use on Docker Hub got a new push in the last 30 days.
- **immich is fixed and updated (afternoon).** On its first start, immich loads a big list of places into its database, 9 parts at once. That needs about 575 MB. Its database had only 512 MB. A box without swap space killed it again and again; the scratch box survived only because it has swap. Now the database gets 768 MB. Tested with swap off: a fresh install on the bench (two times) and on the scratch box, 0 kills. The held immich update is published with it, because that update loads the list again. **Cost: each immich box reserves 256 MB more** (immich already reserves about 4 GB).
- **The full-system backup now waits for app updates — seen live.** On the HP demo box it waited twice while two apps updated, then started, and it worked. The box's settings are back as before.
- **The HP demo box had no full-system backup since 29 Sept** (its disk was just too full to fit one). Today's test made a fresh one. The problem is the old known one: the box's system disk is small.
- **How current the catalog is:** 25 of 53 apps are a little behind their makers, 19 are a big version behind. The plan for which apps to test next is written.
- **Old register rows fixed.** The "up to date" badge is honest now for every app with a test record.
**Rows.** Today in total: 3 closed, 3 narrowed, 5 opened. The list went from 361 to 366 rows. Today **no box gets these fixes at all** — not at night, and not by the Update button either. The reason: the catalog
only records a test when the name changes, so the box never learns that a newer, tested image exists. The page says
"up to date".
**What needs you.** - **Option A — the night takes a tested fix.** The catalog re-tests the same name at the new image (bench and scratch
1. **Nothing to decide.** The immich memory rise follows your earlier rule for raising a limit. Tell me if you want it undone. box, as today), and records it. The box then takes it at night by itself, with its backup and undo. Measured: the box
2. **No golden bake is due.** The golden built today matches the newest controller. The 4 October date matters only if a new controller comes out before then. The weekly bake stays around 7 October. *(Corrected 2026-09-30: the earlier line said a bake was due before 4 October. That was wrong.)* already does this with no change; only the catalog side is new work (about one evening to build). Cost after that:
3. **D4, the image copies:** unchanged. If you do nothing, nothing changes. about 20 app re-tests a month, machine time only, run by day.
- **Option B — keep it manual, say so honestly.** No new work. The fixes arrive only when we move an app to a new name.
Database engines rarely change name, so their fixes may wait for months. I would correct the text of the earlier
decision, which says the night would take them.
**If nothing is decided:** nothing breaks. Database images stay at the build of the day we tested them.
**Who is blocked:** nobody today. **My recommendation: A**, database and redis names first — that is where security
fixes land, and the box side already works.
## What I did, and it worked
- **More apps update themselves at night: 35 now (plus 3 when a full copy exists), up from 30 (+2) at the start of the
evening.** New: gitea, wger, crafty-controller, uptime-kuma, zipline. calibre-web counts as "with a full copy", because its
update rewrites the book library's own database file.
- **Twelve updates tested and published**, each on the test bench and on the scratch box: calibre-web, gitea, wger,
crafty-controller, uptime-kuma, zipline (their first tested updates; zipline in two steps), and emby, ghost, home-assistant, outline, rallly.
Each of these apps is now on its maker's newest version in its line.
- **calibre-web (books) and gitea now have tests.** calibre-web: a book goes in through its Upload button and is read
back. gitea: its first-run form is filled in the way a household does it.
- **immich's older in-between update is fixed.** It still gave the database 512 MB and it does reload the big list of
places. Tested again with 768 MB and no swap: 0 kills. No box runs immich today.
## What broke, and what I did
- **wger: an update would have broken it.** After the update the app looked fine, but nobody could log in. Its database
was never upgraded, because the catalog forgot one setting. **Fixed** in the catalog, and tested again: it works. No
box runs wger.
- **zipline: its newest version cannot be reached in one jump.** The scratch box saw it fail and **put the old version
back by itself in 20 seconds** — the undo worked on a real failure. Going through the version in between works; that
is now the path.
- **The scratch box's disk filled with old app images.** Removing an app or updating it never deletes the old image.
On a household box this would slowly fill the disk until updates are refused. Written down; not fixed today.
- **For a few seconds after a fresh install, calibre-web's well-known default login works.** The box changes it right
after, but the app is already reachable. Written down; not fixed today.
- **wanderer cannot run on the test bench**, so it was not tested. Written down.
**Rows.** Tonight: 3 closed (all three found and fixed tonight), 6 narrowed, 8 opened. The list went from 369 to 377 rows. *(The brief said 366; the
afternoon session had already added three.)*
## What needs you
1. **The decision above** (same-name security fixes). If you do nothing, nothing changes.
2. **The image clean-up on a box** will need your word on what the box keeps (the running image and the one before it,
for the undo). If you do nothing, disks fill slowly; nothing breaks tonight.
3. **No golden bake is due.** The weekly bake stays around 7 October.
@@ -369,6 +369,12 @@ R-636's louder repeated alarm.
wants the TESTED image pulled, and slice 3's ruling freezes the version until a deliberate Update; wants the TESTED image pulled, and slice 3's ruling freezes the version until a deliberate Update;
(a) broke the second. Shipped as controller **v0.269.1** — a second release in the session, instead of (a) broke the second. Shipped as controller **v0.269.1** — a second release in the session, instead of
shipping (a) to the fleet with the floor. shipping (a) to the fleet with the floor.
*Note 2026-09-30 (R-740) — the cost line above is not what the code does.* „(or the automatic leg)": the
automatic leg never presses a digest-only change (`unattended.go:433–435`, skip `no_test_record`). And the
catalog never writes a re-test of a floating tag at a new digest (the writer refuses a step that moves no
image), so a same-name upstream fix reaches no box by either route today. Measured, with the options, in
R-740; the decision is the operator's (STATUS 2026-09-30). This decision's ruling — the sync never moves
an installed app's digest — is unchanged.
### 2026-09-25 (night) — three decisions taken by CC unattended, building §6.4 part 7 ### 2026-09-25 (night) — three decisions taken by CC unattended, building §6.4 part 7
@@ -47,6 +47,17 @@ afternoon catalog with the same registry data: **night (a) 31 + nextcloud condit
have no ladder.** The "behind upstream" counts are not re-measured; bookstack and kimai are now at their newest release have no ladder.** The "behind upstream" counts are not re-measured; bookstack and kimai are now at their newest release
inside the major. inside the major.
### 1b. After the evening's moves (added 2026-09-30 evening, `more-night-apps-2026-09-30/`)
**Correction first:** the numbers above were counted before the immich step of the late afternoon; that step carries
`files_may_change` (R-734), so at `4c552cf` — the evening session's start — `04-analyse.py` reads **night (a) 30 + 2
conditional (nextcloud, immich); (b) 32**, not 31 + 1. The evening published first ladders for calibre-web, gitea, wger,
crafty-controller, uptime-kuma and zipline, and within-major steps for emby, ghost, home-assistant, outline, rallly
(and zipline's second). Re-run of `04-analyse.py` on the evening catalog, same registry data (`more-night-apps-2026-09-30/count/`):
**night (a) 35 + 3 conditional (nextcloud, immich, calibre-web); (b) 38 carry a proven step; 15 have no ladder.**
The "behind upstream" counts are not re-measured; each of the eleven moved apps is now at the newest release inside its
major (re-checked the same evening, `more-night-apps-2026-09-30/00-upstream-recheck.txt`).
## 2. What could not be measured — stated, not guessed ## 2. What could not be measured — stated, not guessed
1. **plant-it** (`msdeluise/plant-it:0.10.0`): Docker Hub gives 401 on the tag list, and its catalog 1. **plant-it** (`msdeluise/plant-it:0.10.0`): Docker Hub gives 401 on the tag list, and its catalog
@@ -0,0 +1,16 @@
# upstream re-check 2026-09-30T14:54:08+00:00
crocodilestick/calibre-web-automated:v4.0.6: newest same major = v4.0.8; newest at all = v4.0.8; newer in major: ['v4.0.7', 'v4.0.8']
gitea/gitea:1.27.0: newest same major = 1.27.3; newest at all = 28.0.0; newer in major: ['1.27.1', '1.27.2', '1.27.3']
emby/embyserver:4.11.0.3: newest same major = 4.11.0.4; newest at all = 4.11.0.4; newer in major: ['4.11.0.4']
ghost:6.65.0-alpine: newest same major = 6.67.0-alpine; newest at all = 6.67.0-alpine; newer in major: ['6.67.0-alpine']
ghcr.io/home-assistant/home-assistant:2026.9.3: newest same major = 2026.9.4; newest at all = 2026.9.4; newer in major: ['2026.9.4']
louislam/uptime-kuma:2.4.0: newest same major = 2.5.5; newest at all = 2.5.5; newer in major: ['2.5.0', '2.5.1', '2.5.2', '2.5.3', '2.5.4', '2.5.5']
wger/server:2.6: newest same major = 2.7; newest at all = 2.7; newer in major: ['2.7']
registry.gitlab.com/crafty-controller/crafty-4:4.10.7: newest same major = 4.11.0; newest at all = 4.11.0; newer in major: ['4.10.8', '4.11.0']
flomp/wanderer-web:v0.20.0: newest same major = v0.21.0; newest at all = v0.21.0; newer in major: ['v0.21.0']
flomp/wanderer-db:v0.20.0: newest same major = v0.21.0; newest at all = v0.21.0; newer in major: ['v0.21.0']
getmeili/meilisearch:v1.36.0: newest same major = v1.54.2; newest at all = v1.54.2; newer in major: ['v1.37.0', 'v1.38.0', 'v1.38.1', 'v1.38.2', 'v1.39.0', 'v1.40.0', 'v1.41.0', 'v1.42.0', 'v1.42.1', 'v1.43.0', 'v1.43.1', 'v1.44.0', 'v1.45.0', 'v1.45.1', 'v1.45.2', 'v1.46.0', 'v1.46.1', 'v1.47.0', 'v1.47.1', 'v1.48.0', 'v1.48.1', 'v1.48.2', 'v1.48.3', 'v1.49.0', 'v1.50.0', 'v1.51.0', 'v1.52.0', 'v1.52.1', 'v1.52.2', 'v1.52.3', 'v1.53.0', 'v1.53.1', 'v1.53.2', 'v1.54.0', 'v1.54.1', 'v1.54.2']
# upstream re-check 2026-09-30T16:10:47+00:00
outlinewiki/outline:1.9.1: newest same major = 1.10.1; newest at all = 1.10.1; newer in major: ['1.9.2', '1.10.0', '1.10.1']
lukevella/rallly:4.11.1: newest same major = 4.15.3; newest at all = 4.15.3; newer in major: ['4.12.0', '4.12.1', '4.12.2', '4.12.3', '4.13.0', '4.13.1', '4.14.0', '4.15.0', '4.15.1', '4.15.2', '4.15.3']
ghcr.io/diced/zipline:4.6.1: newest same major = 4.8.0; newest at all = 4.8.0; newer in major: ['4.6.2', '4.6.3', '4.6.4', '4.6.5', '4.7.0', '4.8.0']
@@ -0,0 +1,15 @@
# calibre-web fresh install on 9202 (drill catalog, controller 0.283.1) — does the KNOWN default login admin/admin123 work before after_install runs?
# probe: GET /opds with HTTP Basic admin:admin123 through the household's front door (traefik, Host books.<domain>), every ~1 s
18:41:24 [1] made the drive paths this app requires: ['/mnt/felhom-drives/scratch_hdd/userdata/calibre-web']
18:41:24 [1] required fields filled beyond DOMAIN/SUBDOMAIN: ['HDD_PATH', 'ADMIN_PASSWORD']
18:41:24 [1] deploy -> 202 {'ok': True, 'message': 'Telepítés elindítva – az állapot a kártyán követhető'}
18:42:09 [1] deployed, controller state=running, pinned={'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'}
deploy at 16:41:21 True
16:41:21 admin:admin123 -> 404
16:42:06 admin:admin123 -> 200
16:42:07 admin:admin123 -> 401
16:42:11 admin:admin123 -> 429
16:43:08 admin:admin123 -> 401
200 (the default login WORKED): 1 polls, 16:42:06 .. 16:42:06
2026/09/30 16:41:49 deploy.go:562: [INFO] [stacks] Stack calibre-web deployed successfully (took 25.3s)
@@ -0,0 +1,83 @@
test_a_prober_that_flags_everything_is_refused (__main__.TestCheckEntryPoint.test_a_prober_that_flags_everything_is_refused)
The other direction — a prober that cannot clear a correct template is equally useless. ... ERROR: the prober failed its own canary — canary-clean: expected CLEAN, got BROKEN (papra: mount /app/data is NOT writable by the app's own uid=999 gid=999; papra: DATA in the writable layer at /app/app-data/db (db_signature=True, e.g. ['db.sqlite']); papra: declared volume /app/data)
refusing to report a verdict: a broken detector reporting CLEAN is worse than no detector at all
ok
test_a_prober_that_never_flags_is_refused (__main__.TestCheckEntryPoint.test_a_prober_that_never_flags_is_refused)
The self-test is the gate's own red-proof. A prober that calls the R-156 canary CLEAN ... ERROR: the prober failed its own canary — canary-broken: expected BROKEN, got CLEAN ()
refusing to report a verdict: a broken detector reporting CLEAN is worse than no detector at all
ok
test_all_clean_passes_with_rc0 (__main__.TestCheckEntryPoint.test_all_clean_passes_with_rc0) ... ok
test_broken_wins_over_undetermined (__main__.TestCheckEntryPoint.test_broken_wins_over_undetermined) ... ok
test_one_broken_app_refuses_with_rc1 (__main__.TestCheckEntryPoint.test_one_broken_app_refuses_with_rc1) ... ok
test_out_of_circulation_apps_are_skipped_and_named (__main__.TestCheckEntryPoint.test_out_of_circulation_apps_are_skipped_and_named) ... ok
test_undetermined_is_rc2_not_rc0 (__main__.TestCheckEntryPoint.test_undetermined_is_rc2_not_rc0)
UNDETERMINED must never read as a clean bill of health. ... ok
test_a_SIBLING_container_holding_the_state_silences_it (__main__.TestClassify.test_a_SIBLING_container_holding_the_state_silences_it)
The measured docmost / immich / claper shape, and the reason the question is asked per ... ok
test_a_mount_that_received_data_silences_the_structural_check (__main__.TestClassify.test_a_mount_that_received_data_silences_the_structural_check)
It must not fire on every app with one empty volume — crafty-controller has three ... ok
test_an_anonymous_volume_at_a_RUNTIME_path_is_not_a_defect (__main__.TestClassify.test_an_anonymous_volume_at_a_RUNTIME_path_is_not_a_defect)
The measured privatebin shape: its image declares `VOLUME /run`, so docker created an ... ok
test_an_anonymous_volume_holding_REAL_data_still_convicts (__main__.TestClassify.test_an_anonymous_volume_holding_REAL_data_still_convicts)
…and the runtime exemption must not become a blanket one. ... ok
test_anonymous_volume_with_data_is_broken (__main__.TestClassify.test_anonymous_volume_with_data_is_broken)
An anonymous volume survives a restart, which is what makes it deceptive: it is absent ... ok
test_container_not_running_is_undetermined (__main__.TestClassify.test_container_not_running_is_undetermined) ... ok
test_empty_declared_volume_alone_is_a_note_not_a_verdict (__main__.TestClassify.test_empty_declared_volume_alone_is_a_note_not_a_verdict)
An empty volume on an app that also wrote nothing is UNDETERMINED, not BROKEN — the ... ok
test_is_noise_dir_covers_the_runtime_directories (__main__.TestClassify.test_is_noise_dir_covers_the_runtime_directories) ... ok
test_known_good_is_clean (__main__.TestClassify.test_known_good_is_clean)
A detector with no proven negative is a detector that flags everything. ... ok
test_no_containers_is_undetermined (__main__.TestClassify.test_no_containers_is_undetermined) ... ok
test_nothing_landed_in_any_mount_is_caught_without_any_path_vocabulary (__main__.TestClassify.test_nothing_landed_in_any_mount_is_caught_without_any_path_vocabulary)
The measured gramps-web miss. Its family tree goes to ... ok
test_papra_signature_is_broken (__main__.TestClassify.test_papra_signature_is_broken)
The whole reason this gate exists: it must reproduce the known instance. ... ok
test_structural_check_stays_silent_when_the_app_wrote_nothing_at_all (__main__.TestClassify.test_structural_check_stays_silent_when_the_app_wrote_nothing_at_all)
An idle app is UNDETERMINED for the existing reason, not accused by this one. ... ok
test_the_structural_finding_SURVIVES_a_broken_verdict (__main__.TestClassify.test_the_structural_finding_SURVIVES_a_broken_verdict)
The measured gramps-web reporting bug. Its accounts DB (rule 2) convicted, and the ... ok
test_wrote_nothing_is_undetermined_not_clean (__main__.TestClassify.test_wrote_nothing_is_undetermined_not_clean)
The load-bearing distinction. An app that wrote nothing has not been shown to be ... ok
test_a_bytecode_cache_DIRECTORY_is_noise (__main__.TestDiffRollup.test_a_bytecode_cache_DIRECTORY_is_noise)
The measured crafty-controller shape. `docker diff` lists directories too, so the ... ok
test_a_chown_sweep_over_image_files_is_not_data (__main__.TestDiffRollup.test_a_chown_sweep_over_image_files_is_not_data)
The measured calibre-web shape: 92 `C` entries under ... ok
test_a_database_signature_still_convicts_on_its_own (__main__.TestDiffRollup.test_a_database_signature_still_convicts_on_its_own)
The demotion must not weaken rule 2 — papra and gramps-web are both caught by it. ... ok
test_a_genuinely_misplaced_PGDATA_is_still_caught (__main__.TestDiffRollup.test_a_genuinely_misplaced_PGDATA_is_still_caught)
…and removing it must not open a blind spot: PG_VERSION and pg_control are the real ... ok
test_a_path_token_alone_does_NOT_convict (__main__.TestDiffRollup.test_a_path_token_alone_does_NOT_convict)
The measured onlyoffice shape: the document server unpacks its OWN static assets into ... ok
test_a_postgres_CONFIG_file_is_not_a_database_signature (__main__.TestDiffRollup.test_a_postgres_CONFIG_file_is_not_a_database_signature)
The measured immich shape: the postgres entrypoint writes /etc/postgresql/postgresql.conf ... ok
test_a_token_dir_is_reported_and_counts_as_the_app_having_written (__main__.TestDiffRollup.test_a_token_dir_is_reported_and_counts_as_the_app_having_written)
Demoted is not discarded. The note must reach the operator, and an app that wrote only ... ok
test_but_one_real_file_among_noise_still_convicts (__main__.TestDiffRollup.test_but_one_real_file_among_noise_still_convicts)
…and the rule must not become a blanket amnesty for any directory with a cache in it. ... ok
test_cache_directories_are_filtered_at_ENTRY_level (__main__.TestDiffRollup.test_cache_directories_are_filtered_at_ENTRY_level)
Where the filtering happens matters, because it is the reason a second ... ok
test_changed_db_file_is_SUSPECT_not_a_verdict (__main__.TestDiffRollup.test_changed_db_file_is_SUSPECT_not_a_verdict)
`C` on a database file is genuinely ambiguous: a chown produces it, and so does an app ... ok
test_created_file_in_a_data_path_IS_data (__main__.TestDiffRollup.test_created_file_in_a_data_path_IS_data)
The other direction — the rule must not become blind. papra's verb is `A`. ... ok
test_db_signature_beats_everything (__main__.TestDiffRollup.test_db_signature_beats_everything) ... ok
test_deleted_entries_are_not_writes (__main__.TestDiffRollup.test_deleted_entries_are_not_writes) ... ok
test_logs_caches_and_pids_are_noise (__main__.TestDiffRollup.test_logs_caches_and_pids_are_noise) ... ok
test_unclassified_writes_are_reported_never_dropped (__main__.TestDiffRollup.test_unclassified_writes_are_reported_never_dropped) ... ok
test_base64key_carries_the_controller_s_base64_prefix (__main__.TestEnvBuilding.test_base64key_carries_the_controller_s_base64_prefix)
felhom-controller `deploy.go:904` returns "base64:"+b64. Without the prefix Laravel ... ok
test_deploy_field_default_and_generate_are_honoured (__main__.TestEnvBuilding.test_deploy_field_default_and_generate_are_honoured) ... ok
test_deploy_fields_block_ends_at_the_next_top_level_key (__main__.TestEnvBuilding.test_deploy_fields_block_ends_at_the_next_top_level_key) ... ok
test_every_compose_var_resolves (__main__.TestEnvBuilding.test_every_compose_var_resolves)
A var resolving to "" binds a bogus root-owned dir at the container root ... ok
test_password_special_carries_the_controllers_shape (__main__.TestEnvBuilding.test_password_special_carries_the_controllers_shape)
R-735: `password:N:special` must be what the controller's randomWithSpecial mints (deploy.go L1335): ... ok
test_benign_touch_stays_clean_and_is_still_reported (__main__.TestSuspectAdjudication.test_benign_touch_stays_clean_and_is_still_reported) ... ok
test_confirmed_write_into_an_image_file_is_broken (__main__.TestSuspectAdjudication.test_confirmed_write_into_an_image_file_is_broken) ... ok
test_unresolved_suspect_is_undetermined_never_clean (__main__.TestSuspectAdjudication.test_unresolved_suspect_is_undetermined_never_clean) ... ok
----------------------------------------------------------------------
Ran 45 tests in 0.017s
OK
@@ -0,0 +1,17 @@
test_password_special_carries_the_controllers_shape (test_check_volume_persistence.TestEnvBuilding.test_password_special_carries_the_controllers_shape)
R-735: `password:N:special` must be what the controller's randomWithSpecial mints (deploy.go L1335): ... FAIL
======================================================================
FAIL: test_password_special_carries_the_controllers_shape (test_check_volume_persistence.TestEnvBuilding.test_password_special_carries_the_controllers_shape)
R-735: `password:N:special` must be what the controller's randomWithSpecial mints (deploy.go L1335):
----------------------------------------------------------------------
Traceback (most recent call last):
File "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts/test_check_volume_persistence.py", line 453, in test_password_special_carries_the_controllers_shape
self.assertEqual(len(v), 24, v)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
AssertionError: 32 != 24 : <the generated throwaway value, redacted>
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (failures=1)
@@ -0,0 +1 @@
--move: nothing moves
@@ -0,0 +1,61 @@
[17:35:51] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/hdd/userdata/media/books', '/srv/felhom-gate/import/calibre']
[17:35:51] N-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[17:36:22] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:36:22] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[17:36:22] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[17:36:25] calibre-web: after_install :: OKIE_SECURE set to False (Standard/LDAP login) Password for user 'admin' changed
[17:36:25] calibre-web: POST /upload http=200 {"location": "/tasks"}
[17:36:26] calibre-web: seeded book upg564b2e2d107d is in the library
[17:36:32] calibre-web: readback — listed=True download_link=True book_content_served=True
[17:36:32] C1 (seed reads back BEFORE): True
[17:36:32] N-calibre-web: swapping to TO {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'}
[17:36:42] TO up -d rc=0
[17:37:13] TO settled=True in 30.9s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:37:13] migration lines observed: 6
[17:37:15] calibre-web: readback — listed=True download_link=True book_content_served=True
[17:37:15] RESULT (seed reads back AFTER): True
[17:37:15] files_may_change — the files: ['/srv/felhom-gate/hdd/userdata/media/books/metadata.db (changed)', '/srv/felhom-gate/hdd/userdata/media/books/metadata.db-shm (changed)', '/srv/felhom-gate/hdd/userdata/media/books/metadata.db-wal (changed)']
[17:37:15] files_may_change: the bind-mounted tree changed under ['/srv/felhom-gate/hdd/userdata/media/books']
[17:37:15] N-calibre-web: ABORT — putting the FROM images back
[17:37:58] calibre-web: readback — listed=True download_link=True book_content_served=True
[17:37:58] ABORT: app came back in 30.9s; data present=True
{
"harness_version": 4,
"edge": "N-calibre-web",
"app": "calibre-web",
"note": "names re-run 2026-09-30 (soak 0)",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kcalibre-web | [migrations] started",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": null,
"marks": [
"files_may_change"
],
"duration_s": 30.9,
"measured_at": "2026-09-30T17:37:58Z",
"evidence": "evidence/N-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/hdd/userdata/media/books",
"/srv/felhom-gate/import/calibre"
],
"files_changed": [
"/srv/felhom-gate/hdd/userdata/media/books"
],
"files_changed_detail": [
"/srv/felhom-gate/hdd/userdata/media/books/metadata.db (changed)",
"/srv/felhom-gate/hdd/userdata/media/books/metadata.db-shm (changed)",
"/srv/felhom-gate/hdd/userdata/media/books/metadata.db-wal (changed)"
],
"total_s": 127.2
}
@@ -0,0 +1,8 @@
{
"calibre-web": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,198 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | ,gggg, ,ggg, gg ,gg
calibre-web | ,88"""Y8b, ,dPYb, ,dPYb, dP""Y8a 88 ,8P ,dPYb,
calibre-web | d8" `Y8 IP'`Yb IP'`Yb Yb, `88 88 d8' IP'`Yb
calibre-web | d8' 8b d8 I8 8I gg I8 8I `" 88 88 88 I8 8I
calibre-web | ,8I "Y88P' I8 8' "" I8 8' 88 88 88 I8 8'
calibre-web | I8' ,gggg,gg I8 dP gg I8 dP ,gggggg, ,ggg, aaaaaaaa 88 88 88 ,ggg, I8 dP
calibre-web | d8 dP" "Y8I I8dP 88 I8dP 88gg dP""""8I i8" "8i """""""" 88 88 88 i8" "8i I8dP 88gg
calibre-web | Y8, i8' ,8I I8P 88 I8P 8I ,8' 8I I8, ,8I Y8 ,88, 8P I8, ,8I I8P 8I
calibre-web | `Yba,,_____, ,d8, ,d8b,,d8b,_ _,88,_,d8b, ,8I ,dP Y8, `YbadP' Yb,,d8""8b,,dP `YbadP' ,d8b, ,8I
calibre-web | `"Y8888888 P"Y8888P"`Y88P'"Y888P""Y88P'"Y88P"' 8P `Y8888P"Y888 "88" "88" 888P"Y8888P'"Y88P"'
calibre-web |
calibre-web |
calibre-web | █████╗ ██╗ ██╗████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗██████╗
calibre-web | ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
calibre-web | ███████║██║ ██║ ██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ██║ ██║
calibre-web | ██╔══██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ██║ ██║
calibre-web | ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗██████╔╝
calibre-web | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝
calibre-web |
calibre-web |
calibre-web | ~~~ Based on docker-calibre-web from linuxserver.io & Calibre-Web by janeczku ~~~
calibre-web |
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | To support the app dev(s) visit:
calibre-web | Calibre-Web Automated: https://ko-fi.com/crocodilestick/tip
calibre-web | To support LSIO projects visit:
calibre-web | https://www.linuxserver.io/donate/
calibre-web |
calibre-web | ───────────────────────────────────────
calibre-web | GID/UID
calibre-web | ───────────────────────────────────────
calibre-web |
calibre-web | User UID: 1000
calibre-web | User GID: 1000
calibre-web | ───────────────────────────────────────
calibre-web | [cwa-init] Starting CWA initialization process...
calibre-web | [cwa-init] Verifying essential directories...
calibre-web | [cwa-init] Directory /app/calibre-web-automated verified
calibre-web | [cwa-init] Directory /config verified
calibre-web | [cwa-init] Directory /calibre-library verified
calibre-web | [cwa-init] Directory /app/calibre verified
calibre-web | [cwa-init] Verifying essential files...
calibre-web | [cwa-init] File /app/CWA_RELEASE verified
calibre-web | [cwa-init] File /CALIBRE_RELEASE verified
calibre-web | [cwa-init] Environment verification complete
calibre-web | [cwa-init] Setting up ImageMagick policy...
calibre-web | [cwa-init] Checking for leftover lock files from previous instance...
calibre-web | [cwa-init] No leftover lock files to remove. Ending service...
calibre-web | [cwa-init] Checking for an existing app.db in /config...
calibre-web | [cwa-init] Existing app.db found!
calibre-web | [cwa-init] Setting binary paths in '/config/app.db' to the correct ones...
calibre-web | [cwa-init] Successfully set binary paths in '/config/app.db'!
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [cwa-init] Dark theme enforcement completed.
calibre-web | [cwa-init] CWA-init complete! Service exiting now...
calibre-web | [cwa-init] Existing user_profiles.json found!
calibre-web | [cwa-init] Preparing to set ownership of everything in /config, /app/calibre-web-automated, /calibre-library, /cwa-book-ingest, /calibre-library, /config/.cwa_conversion_tmp to abc:abc...
calibre-web | [cwa-init] Successfully set permissions for '/config'!
calibre-web | [cwa-init] Successfully set permissions for '/app/calibre-web-automated'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/cwa-book-ingest'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/config/.cwa_conversion_tmp'!
calibre-web | [cwa-init][qt6] Starting Qt6 compatibility check...
calibre-web | [cwa-init][qt6] Host kernel 7.0.2-6-pve >= 6.0: leaving Qt6 libs intact for full functionality. (PDF/WebEngine features enabled)
calibre-web | [cwa-init][qt6] Qt6 compatibility check completed.
calibre-web | [cwa-init] Resolving CWA versions (installed + latest stable) ...
calibre-web | [cwa-init] Installed version: v4.0.6
calibre-web | [cwa-init] Attempting to fetch latest stable version from GitHub...
calibre-web | [cwa-init] Using jq for JSON parsing...
calibre-web | [cwa-init] Successfully fetched stable version via jq: v4.0.8
calibre-web | [cwa-init] Valid stable version retrieved: v4.0.8
calibre-web | [cwa-init] Stable version persisted to /app/CWA_STABLE_RELEASE
calibre-web | [cwa-init] Versions resolved: INSTALLED=v4.0.6, STABLE=v4.0.8
calibre-web | [cwa-auto-zipper] Starting CWA-Auto-Zipper service...
calibre-web | [cwa-auto-zipper] Matching internal localtime & timezone with the one provided...
calibre-web | [cwa-process-recovery] Starting process recovery and cleanup...
calibre-web | [cwa-process-recovery] ========== Starting Recovery Sequence ==========
calibre-web | [cwa-process-recovery] Cleaning up stale temporary files...
calibre-web | [calibre-binaries-setup] Starting Calibre binaries setup...
calibre-web | [calibre-binaries-setup] Checking if Calibre is already installed...
calibre-web | [calibre-binaries-setup] Calibre version check timed out or failed, assuming not installed
calibre-web | [calibre-binaries-setup] USER NOTE: 'Ignore calibredb: command not found' above, nothing is wrong, this just indicates to CWA that Calibre still needs to be installed
calibre-web | [cwa-auto-zipper] Zoneinfo for Europe/Budapest found. Setting /etc/localtime and /etc/timezone to match...
calibre-web | [calibre-binaries-setup] Installing Calibre version 9.1.0...
calibre-web | [calibre-binaries-setup] This may take several minutes, please wait...
calibre-web | [cwa-auto-zipper] Timezone & Localtime successfully set to Europe/Budapest. Initiating Auto-Zipper ...
calibre-web | [cwa-process-recovery] Cleaned up 6 stale temporary file(s)
calibre-web | [cwa-process-recovery] Checking processing status...
calibre-web | [cwa-process-recovery] Processing status is: idle
calibre-web | [cwa-process-recovery] Checking for orphaned CWA processes...
calibre-web | [cwa-auto-zipper] Next run in 15690 seconds.
calibre-web | [custom-init] No custom files found, skipping...
calibre-web | [cwa-process-recovery] No orphaned CWA processes found
calibre-web | [cwa-process-recovery] ========== Recovery Sequence Complete ==========
calibre-web | [cwa-process-recovery] Process recovery service finished successfully
calibre-web | [cwa-auto-library]: Existing library found at /calibre-library, mounting now...
calibre-web | [cwa-auto-library] Updating dirs.json with new library location...
calibre-web | [cwa-auto-library]: Updating Settings Database with library location...
calibre-web | [cwa-auto-library] Library location successfully set to: /calibre-library
calibre-web | [cwa-auto-library] Service completed successfully! Ending service...
calibre-web | xdg-desktop-menu: No writable system menu directory found.
calibre-web | Creating symlinks...
calibre-web | Symlinking /app/calibre/ebook-device to /usr/bin/ebook-device
calibre-web | Symlinking /app/calibre/ebook-meta to /usr/bin/ebook-meta
calibre-web | Symlinking /app/calibre/ebook-convert to /usr/bin/ebook-convert
calibre-web | Symlinking /app/calibre/ebook-polish to /usr/bin/ebook-polish
calibre-web | Symlinking /app/calibre/markdown-calibre to /usr/bin/markdown-calibre
calibre-web | Symlinking /app/calibre/web2disk to /usr/bin/web2disk
calibre-web | Symlinking /app/calibre/calibre-server to /usr/bin/calibre-server
calibre-web | Symlinking /app/calibre/lrf2lrs to /usr/bin/lrf2lrs
calibre-web | Symlinking /app/calibre/lrs2lrf to /usr/bin/lrs2lrf
calibre-web | Symlinking /app/calibre/calibre-debug to /usr/bin/calibre-debug
calibre-web | Symlinking /app/calibre/calibredb to /usr/bin/calibredb
calibre-web | Symlinking /app/calibre/calibre-parallel to /usr/bin/calibre-parallel
calibre-web | Symlinking /app/calibre/calibre-customize to /usr/bin/calibre-customize
calibre-web | Symlinking /app/calibre/fetch-ebook-metadata to /usr/bin/fetch-ebook-metadata
calibre-web | Symlinking /app/calibre/calibre-smtp to /usr/bin/calibre-smtp
calibre-web | Symlinking /app/calibre/calibre to /usr/bin/calibre
calibre-web | Symlinking /app/calibre/lrfviewer to /usr/bin/lrfviewer
calibre-web | Symlinking /app/calibre/ebook-viewer to /usr/bin/ebook-viewer
calibre-web | Symlinking /app/calibre/ebook-edit to /usr/bin/ebook-edit
calibre-web | Setting up command-line completion...
calibre-web | Installing zsh completion to: /usr/share/zsh/vendor-completions/_calibre
calibre-web | Failed to find directory to install bash completions, using default.
calibre-web | Installing bash completion to: /usr/share/bash-completion/completions/
calibre-web | Setting up desktop integration...
calibre-web |
calibre-web | ____________________ WARNING ____________________
calibre-web | Setting up desktop integration failed with error:
calibre-web | __________________________________________________
calibre-web |
calibre-web |
calibre-web | Traceback (most recent call last):
calibre-web | File "calibre/linux.py", line 858, in setup_desktop_integration
calibre-web | File "calibre/linux.py", line 880, in do_setup_desktop_integration
calibre-web | File "calibre/linux.py", line 960, in install_xdg_junk
calibre-web | File "subprocess.py", line 419, in check_call
calibre-web | subprocess.CalledProcessError: Command 'xdg-desktop-menu install --noupdate ./calibre-gui.desktop' returned non-zero exit status 3.
calibre-web |
calibre-web | Creating un-installer: /usr/bin/calibre-uninstall
calibre-web |
calibre-web |
calibre-web | There were 1 warnings
calibre-web |
calibre-web | * Setting up desktop integration failed with error:
calibre-web |
calibre-web | [calibre-binaries-setup] Calibre setup completed successfully!
calibre-web | [calibre-binaries-setup] Installation verified: calibredb (calibre 9.1)
calibre-web | [calibre-binaries-setup] Service completed successfully, exiting...
calibre-web | [2026-09-30 19:37:35,977] INFO {cps:92} ProxyFix configured to trust 1 proxy(ies) for X-Forwarded-* headers
calibre-web | [2026-09-30 19:37:36,073] INFO {cps.ub:1066} Migrating system magic shelves...
calibre-web | [2026-09-30 19:37:36,096] INFO {cps.ub:1119} System shelf migration complete: 1 old shelves removed, 0 new shelves created
calibre-web | [2026-09-30 19:37:36,215] INFO {cps:140} SESSION_COOKIE_SECURE set to False (Standard/LDAP login)
calibre-web | [2026-09-30 19:37:36,265] INFO {cps:197} Starting Calibre Web...
calibre-web | [2026-09-30 19:37:37,167] INFO {cps:217} OAuth blueprints initialized successfully
calibre-web | [2026-09-30 19:37:37,191] WARN {py.warnings:110} /lsiopy/lib/python3.13/site-packages/flask_limiter/extension.py:324: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
calibre-web | warnings.warn(
calibre-web |
calibre-web | [2026-09-30 19:37:37,469] INFO {apscheduler.scheduler:214} Scheduler started
calibre-web | [2026-09-30 19:37:37,470] INFO {apscheduler.scheduler:1090} Added job "delete temp" to job store "default"
calibre-web | [2026-09-30 19:37:37,470] INFO {apscheduler.scheduler:1090} Added job "delete superfluous book covers" to job store "default"
calibre-web | [2026-09-30 19:37:37,471] INFO {apscheduler.scheduler:1090} Added job "generate book covers" to job store "default"
calibre-web | [2026-09-30 19:37:38,129] INFO {apscheduler.scheduler:1090} Added job "end scheduled task" to job store "default"
calibre-web | [2026-09-30 19:37:38,134] INFO {apscheduler.scheduler:1090} Added job "clean archived book references" to job store "default"
calibre-web | [2026-09-30 19:37:38,136] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
calibre-web | [2026-09-30 19:37:38,154] INFO {apscheduler.scheduler:1090} Added job "immediately delete temp" to job store "default"
calibre-web | [2026-09-30 19:37:38,155] INFO {apscheduler.executors.default:129} Running job "immediately delete temp (trigger: date[2026-09-30 19:37:38 CEST], next run at: 2026-09-30 19:37:38 CEST)" (scheduled at 2026-09-30 19:37:38.154619+02:00)
calibre-web | [2026-09-30 19:37:38,155] INFO {apscheduler.scheduler:728} Removed job cfc3b0f6857a4528870a4e38ddaffccc
calibre-web | [2026-09-30 19:37:38,181] INFO {apscheduler.executors.default:156} Job "immediately delete temp (trigger: date[2026-09-30 19:37:38 CEST], next run at: 2026-09-30 19:37:38 CEST)" executed successfully
calibre-web | [2026-09-30 19:37:39,110] INFO {cps.remotelogin:32} Magic Link QRCode is enabled
calibre-web | [2026-09-30 19:37:39,276] INFO {cps.server:207} Starting Gevent server on [::]:8083
calibre-web | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web | ========== STARTING CWA-INGEST SERVICE ==========
calibre-web | ========== STARTING METADATA CHANGE DETECTOR ===========
calibre-web | [cwa-checksum-backfill] Waiting for CWA service to be ready...
calibre-web | [metadata-change-detector] Watching folder: /app/calibre-web-automated/metadata_change_logs
calibre-web | [cwa-ingest-service] Watching folder: /cwa-book-ingest
calibre-web | Setting up watches.
calibre-web | Watches established.
calibre-web | Setting up watches. Beware: since -r was given, this may take a while!
calibre-web | Watches established.
calibre-web | [2026-09-30 19:37:57,299] WARN {cps.usermanagement:137} OPDS Login failed for user "admin" IP-address: ::ffff:172.18.0.1
calibre-web | [2026-09-30 19:37:58,441] INFO {cps.helper:1265} Renamed exported file to match expected name: upg564b2e2d107d - Drill Author.epub
calibre-web | [2026-09-30 19:37:58,442] ERROR {cps.progress_syncing.checksums.manager:128} Failed to store checksum for book 2: (sqlite3.OperationalError) no such table: book_format_checksums
calibre-web | [SQL:
calibre-web | SELECT id FROM book_format_checksums
calibre-web | WHERE book = ?
calibre-web | AND format = ?
calibre-web | AND checksum = ?
calibre-web | ]
calibre-web | [parameters: (2, 'EPUB', '201f4f0126b3d3617d4f8889a9d03f93')]
calibre-web | (Background on this error at: https://sqlalche.me/e/20/e3q8)
@@ -0,0 +1,11 @@
{
"/srv/felhom-gate/hdd/userdata/media/books": {
"metadata.db-wal": "0:e3b0c44298fc1c14",
"metadata.db": "425984:f1fc15ccfa03d754",
"metadata.db-shm": "32768:fd4c9fda9cd3f9ae",
"Drill Author/upg564b2e2d107d (2)/upg564b2e2d107d - Drill Author.epub": "1436:0e6c3b2dfe7cbeb5",
"Drill Author/upg564b2e2d107d (2)/metadata.opf": "1030:c681f1d3bb6b978e",
".calnotes/notes.db": "77824:5ffb1a7c5f416c3c"
},
"/srv/felhom-gate/import/calibre": {}
}
@@ -0,0 +1,4 @@
{
"/srv/felhom-gate/hdd/userdata/media/books": "1ce27ee0fbdae06889641bcc62b2797b229cf05b4758989602deae67604d5645",
"/srv/felhom-gate/import/calibre": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,11 @@
{
"/srv/felhom-gate/hdd/userdata/media/books": {
"metadata.db-wal": "206032:7cdc627a3594dc79",
"metadata.db": "413696:d542bbdc99ab14d1",
"metadata.db-shm": "32768:c7012b1e7507b0bb",
"Drill Author/upg564b2e2d107d (2)/upg564b2e2d107d - Drill Author.epub": "1436:0e6c3b2dfe7cbeb5",
"Drill Author/upg564b2e2d107d (2)/metadata.opf": "1030:c681f1d3bb6b978e",
".calnotes/notes.db": "77824:5ffb1a7c5f416c3c"
},
"/srv/felhom-gate/import/calibre": {}
}
@@ -0,0 +1,4 @@
{
"/srv/felhom-gate/hdd/userdata/media/books": "7e079940c9c4f480238467739acab28804955e7f70709814a69785155d6504ba",
"/srv/felhom-gate/import/calibre": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,6 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [2026-09-30 19:36:52,396] INFO {cps.ub:1144} Migrating system magic shelves...
calibre-web | [2026-09-30 19:36:52,413] INFO {cps.ub:1197} System shelf migration complete: 0 old shelves removed, 1 new shelves created
calibre-web | [2026-09-30 19:36:54,349] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
@@ -0,0 +1,21 @@
[17:35:51] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/hdd/userdata/media/books', '/srv/felhom-gate/import/calibre']
[17:35:51] N-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[17:36:22] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:36:22] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[17:36:22] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[17:36:25] calibre-web: after_install :: OKIE_SECURE set to False (Standard/LDAP login) Password for user 'admin' changed
[17:36:25] calibre-web: POST /upload http=200 {"location": "/tasks"}
[17:36:26] calibre-web: seeded book upg564b2e2d107d is in the library
[17:36:32] calibre-web: readback — listed=True download_link=True book_content_served=True
[17:36:32] C1 (seed reads back BEFORE): True
[17:36:32] N-calibre-web: swapping to TO {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'}
[17:36:42] TO up -d rc=0
[17:37:13] TO settled=True in 30.9s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:37:13] migration lines observed: 6
[17:37:15] calibre-web: readback — listed=True download_link=True book_content_served=True
[17:37:15] RESULT (seed reads back AFTER): True
[17:37:15] files_may_change — the files: ['/srv/felhom-gate/hdd/userdata/media/books/metadata.db (changed)', '/srv/felhom-gate/hdd/userdata/media/books/metadata.db-shm (changed)', '/srv/felhom-gate/hdd/userdata/media/books/metadata.db-wal (changed)']
[17:37:15] files_may_change: the bind-mounted tree changed under ['/srv/felhom-gate/hdd/userdata/media/books']
[17:37:15] N-calibre-web: ABORT — putting the FROM images back
[17:37:58] calibre-web: readback — listed=True download_link=True book_content_served=True
[17:37:58] ABORT: app came back in 30.9s; data present=True
@@ -0,0 +1,189 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | ,gggg, ,ggg, gg ,gg
calibre-web | ,88"""Y8b, ,dPYb, ,dPYb, dP""Y8a 88 ,8P ,dPYb,
calibre-web | d8" `Y8 IP'`Yb IP'`Yb Yb, `88 88 d8' IP'`Yb
calibre-web | d8' 8b d8 I8 8I gg I8 8I `" 88 88 88 I8 8I
calibre-web | ,8I "Y88P' I8 8' "" I8 8' 88 88 88 I8 8'
calibre-web | I8' ,gggg,gg I8 dP gg I8 dP ,gggggg, ,ggg, aaaaaaaa 88 88 88 ,ggg, I8 dP
calibre-web | d8 dP" "Y8I I8dP 88 I8dP 88gg dP""""8I i8" "8i """""""" 88 88 88 i8" "8i I8dP 88gg
calibre-web | Y8, i8' ,8I I8P 88 I8P 8I ,8' 8I I8, ,8I Y8 ,88, 8P I8, ,8I I8P 8I
calibre-web | `Yba,,_____, ,d8, ,d8b,,d8b,_ _,88,_,d8b, ,8I ,dP Y8, `YbadP' Yb,,d8""8b,,dP `YbadP' ,d8b, ,8I
calibre-web | `"Y8888888 P"Y8888P"`Y88P'"Y888P""Y88P'"Y88P"' 8P `Y8888P"Y888 "88" "88" 888P"Y8888P'"Y88P"'
calibre-web |
calibre-web |
calibre-web | █████╗ ██╗ ██╗████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗██████╗
calibre-web | ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
calibre-web | ███████║██║ ██║ ██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ██║ ██║
calibre-web | ██╔══██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ██║ ██║
calibre-web | ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗██████╔╝
calibre-web | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝
calibre-web |
calibre-web |
calibre-web | ~~~ Based on docker-calibre-web from linuxserver.io & Calibre-Web by janeczku ~~~
calibre-web |
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | To support the app dev(s) visit:
calibre-web | Calibre-Web Automated: https://ko-fi.com/crocodilestick/tip
calibre-web | To support LSIO projects visit:
calibre-web | https://www.linuxserver.io/donate/
calibre-web |
calibre-web | ───────────────────────────────────────
calibre-web | GID/UID
calibre-web | ───────────────────────────────────────
calibre-web |
calibre-web | User UID: 1000
calibre-web | User GID: 1000
calibre-web | ───────────────────────────────────────
calibre-web | [cwa-init] Starting CWA initialization process...
calibre-web | [cwa-init] Verifying essential directories...
calibre-web | [cwa-init] Directory /app/calibre-web-automated verified
calibre-web | [cwa-init] Directory /config verified
calibre-web | [cwa-init] Directory /calibre-library verified
calibre-web | [cwa-init] Directory /app/calibre verified
calibre-web | [cwa-init] Verifying essential files...
calibre-web | [cwa-init] File /app/CWA_RELEASE verified
calibre-web | [cwa-init] File /CALIBRE_RELEASE verified
calibre-web | [cwa-init] Environment verification complete
calibre-web | [cwa-init] Setting up ImageMagick policy...
calibre-web | [cwa-init] Checking for leftover lock files from previous instance...
calibre-web | [cwa-init] No leftover lock files to remove. Ending service...
calibre-web | [cwa-init] Checking for an existing app.db in /config...
calibre-web | [cwa-init] Existing app.db found!
calibre-web | [cwa-init] Setting binary paths in '/config/app.db' to the correct ones...
calibre-web | [cwa-init] Successfully set binary paths in '/config/app.db'!
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [cwa-init] Dark theme enforcement completed.
calibre-web | [cwa-init] CWA-init complete! Service exiting now...
calibre-web | [cwa-init] Existing user_profiles.json found!
calibre-web | [cwa-init] Preparing to set ownership of everything in /config, /app/calibre-web-automated, /calibre-library, /cwa-book-ingest, /calibre-library, /config/.cwa_conversion_tmp to abc:abc...
calibre-web | [cwa-init] Successfully set permissions for '/config'!
calibre-web | [cwa-init] Successfully set permissions for '/app/calibre-web-automated'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/cwa-book-ingest'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/config/.cwa_conversion_tmp'!
calibre-web | [cwa-init][qt6] Starting Qt6 compatibility check...
calibre-web | [cwa-init][qt6] Host kernel 7.0.2-6-pve >= 6.0: leaving Qt6 libs intact for full functionality. (PDF/WebEngine features enabled)
calibre-web | [cwa-init][qt6] Qt6 compatibility check completed.
calibre-web | [cwa-init] Resolving CWA versions (installed + latest stable) ...
calibre-web | [cwa-init] Installed version: v4.0.8
calibre-web | [cwa-init] Attempting to fetch latest stable version from GitHub...
calibre-web | [cwa-init] Using jq for JSON parsing...
calibre-web | [cwa-init] Successfully fetched stable version via jq: v4.0.8
calibre-web | [cwa-init] Valid stable version retrieved: v4.0.8
calibre-web | [cwa-init] Stable version persisted to /app/CWA_STABLE_RELEASE
calibre-web | [cwa-init] Versions resolved: INSTALLED=v4.0.8, STABLE=v4.0.8
calibre-web | [cwa-process-recovery] Starting process recovery and cleanup...
calibre-web | [cwa-auto-zipper] Starting CWA-Auto-Zipper service...
calibre-web | [cwa-auto-zipper] Matching internal localtime & timezone with the one provided...
calibre-web | [calibre-binaries-setup] Starting Calibre binaries setup...
calibre-web | [calibre-binaries-setup] Checking if Calibre is already installed...
calibre-web | [cwa-process-recovery] ========== Starting Recovery Sequence ==========
calibre-web | [cwa-process-recovery] Cleaning up stale temporary files...
calibre-web | [calibre-binaries-setup] Calibre version check timed out or failed, assuming not installed
calibre-web | [calibre-binaries-setup] USER NOTE: 'Ignore calibredb: command not found' above, nothing is wrong, this just indicates to CWA that Calibre still needs to be installed
calibre-web | [calibre-binaries-setup] Installing Calibre version 9.1.0...
calibre-web | [calibre-binaries-setup] This may take several minutes, please wait...
calibre-web | [cwa-auto-zipper] Zoneinfo for Europe/Budapest found. Setting /etc/localtime and /etc/timezone to match...
calibre-web | [cwa-auto-zipper] Timezone & Localtime successfully set to Europe/Budapest. Initiating Auto-Zipper ...
calibre-web | [cwa-process-recovery] Cleaned up 6 stale temporary file(s)
calibre-web | [cwa-process-recovery] Checking processing status...
calibre-web | [cwa-process-recovery] Processing status is: idle
calibre-web | [custom-init] No custom files found, skipping...
calibre-web | [cwa-auto-zipper] Next run in 15733 seconds.
calibre-web | [cwa-process-recovery] Checking for orphaned CWA processes...
calibre-web | [cwa-process-recovery] No orphaned CWA processes found
calibre-web | [cwa-process-recovery] ========== Recovery Sequence Complete ==========
calibre-web | [cwa-process-recovery] Process recovery service finished successfully
calibre-web | [cwa-auto-library]: Existing library found at /calibre-library, mounting now...
calibre-web | [cwa-auto-library] Updating dirs.json with new library location...
calibre-web | [cwa-auto-library]: Updating Settings Database with library location...
calibre-web | [cwa-auto-library] Library location successfully set to: /calibre-library
calibre-web | [cwa-auto-library] Service completed successfully! Ending service...
calibre-web | xdg-desktop-menu: No writable system menu directory found.
calibre-web | Creating symlinks...
calibre-web | Symlinking /app/calibre/ebook-device to /usr/bin/ebook-device
calibre-web | Symlinking /app/calibre/ebook-meta to /usr/bin/ebook-meta
calibre-web | Symlinking /app/calibre/ebook-convert to /usr/bin/ebook-convert
calibre-web | Symlinking /app/calibre/ebook-polish to /usr/bin/ebook-polish
calibre-web | Symlinking /app/calibre/markdown-calibre to /usr/bin/markdown-calibre
calibre-web | Symlinking /app/calibre/web2disk to /usr/bin/web2disk
calibre-web | Symlinking /app/calibre/calibre-server to /usr/bin/calibre-server
calibre-web | Symlinking /app/calibre/lrf2lrs to /usr/bin/lrf2lrs
calibre-web | Symlinking /app/calibre/lrs2lrf to /usr/bin/lrs2lrf
calibre-web | Symlinking /app/calibre/calibre-debug to /usr/bin/calibre-debug
calibre-web | Symlinking /app/calibre/calibredb to /usr/bin/calibredb
calibre-web | Symlinking /app/calibre/calibre-parallel to /usr/bin/calibre-parallel
calibre-web | Symlinking /app/calibre/calibre-customize to /usr/bin/calibre-customize
calibre-web | Symlinking /app/calibre/fetch-ebook-metadata to /usr/bin/fetch-ebook-metadata
calibre-web | Symlinking /app/calibre/calibre-smtp to /usr/bin/calibre-smtp
calibre-web | Symlinking /app/calibre/calibre to /usr/bin/calibre
calibre-web | Symlinking /app/calibre/lrfviewer to /usr/bin/lrfviewer
calibre-web | Symlinking /app/calibre/ebook-viewer to /usr/bin/ebook-viewer
calibre-web | Symlinking /app/calibre/ebook-edit to /usr/bin/ebook-edit
calibre-web | Setting up command-line completion...
calibre-web | Installing zsh completion to: /usr/share/zsh/vendor-completions/_calibre
calibre-web | Failed to find directory to install bash completions, using default.
calibre-web | Installing bash completion to: /usr/share/bash-completion/completions/
calibre-web | Setting up desktop integration...
calibre-web |
calibre-web | ____________________ WARNING ____________________
calibre-web | Setting up desktop integration failed with error:
calibre-web | __________________________________________________
calibre-web |
calibre-web |
calibre-web | Traceback (most recent call last):
calibre-web | File "calibre/linux.py", line 858, in setup_desktop_integration
calibre-web | File "calibre/linux.py", line 880, in do_setup_desktop_integration
calibre-web | File "calibre/linux.py", line 960, in install_xdg_junk
calibre-web | File "subprocess.py", line 419, in check_call
calibre-web | subprocess.CalledProcessError: Command 'xdg-desktop-menu install --noupdate ./calibre-gui.desktop' returned non-zero exit status 3.
calibre-web |
calibre-web | Creating un-installer: /usr/bin/calibre-uninstall
calibre-web |
calibre-web |
calibre-web | There were 1 warnings
calibre-web |
calibre-web | * Setting up desktop integration failed with error:
calibre-web |
calibre-web | [calibre-binaries-setup] Calibre setup completed successfully!
calibre-web | [calibre-binaries-setup] Installation verified: calibredb (calibre 9.1)
calibre-web | [calibre-binaries-setup] Service completed successfully, exiting...
calibre-web | [2026-09-30 19:36:52,291] INFO {cps:93} ProxyFix configured to trust 1 proxy(ies) for X-Forwarded-* headers
calibre-web | [2026-09-30 19:36:52,396] INFO {cps.ub:1144} Migrating system magic shelves...
calibre-web | [2026-09-30 19:36:52,407] INFO {cps.magic_shelf:790} Created system magic shelf 'Currently Reading' for user 1
calibre-web | [2026-09-30 19:36:52,413] INFO {cps.magic_shelf:800} Successfully created 1 system magic shelves for user 1
calibre-web | [2026-09-30 19:36:52,413] INFO {cps.ub:1197} System shelf migration complete: 0 old shelves removed, 1 new shelves created
calibre-web | [2026-09-30 19:36:52,505] INFO {cps:141} SESSION_COOKIE_SECURE set to False (Standard/LDAP login)
calibre-web | [2026-09-30 19:36:52,568] INFO {cps:198} Starting Calibre Web...
calibre-web | [2026-09-30 19:36:53,268] INFO {cps:218} OAuth blueprints initialized successfully
calibre-web | [2026-09-30 19:36:53,314] WARN {py.warnings:110} /lsiopy/lib/python3.13/site-packages/flask_limiter/extension.py:324: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
calibre-web | warnings.warn(
calibre-web |
calibre-web | [2026-09-30 19:36:53,632] INFO {apscheduler.scheduler:214} Scheduler started
calibre-web | [2026-09-30 19:36:53,633] INFO {apscheduler.scheduler:1092} Added job "delete temp" to job store "default"
calibre-web | [2026-09-30 19:36:53,633] INFO {apscheduler.scheduler:1092} Added job "delete superfluous book covers" to job store "default"
calibre-web | [2026-09-30 19:36:53,633] INFO {apscheduler.scheduler:1092} Added job "generate book covers" to job store "default"
calibre-web | [2026-09-30 19:36:54,342] INFO {apscheduler.scheduler:1092} Added job "end scheduled task" to job store "default"
calibre-web | [2026-09-30 19:36:54,347] INFO {apscheduler.scheduler:1092} Added job "clean archived book references" to job store "default"
calibre-web | [2026-09-30 19:36:54,349] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
calibre-web | [2026-09-30 19:36:54,366] INFO {apscheduler.scheduler:1092} Added job "immediately delete temp" to job store "default"
calibre-web | [2026-09-30 19:36:54,366] INFO {apscheduler.executors.default:129} Running job "immediately delete temp (trigger: date[2026-09-30 19:36:54 CEST], next run at: 2026-09-30 19:36:54 CEST)" (scheduled at 2026-09-30 19:36:54.365896+02:00)
calibre-web | [2026-09-30 19:36:54,367] INFO {apscheduler.scheduler:728} Removed job 408381914a0a4fad85b402d14142be23
calibre-web | [2026-09-30 19:36:54,392] INFO {apscheduler.executors.default:156} Job "immediately delete temp (trigger: date[2026-09-30 19:36:54 CEST], next run at: 2026-09-30 19:36:54 CEST)" executed successfully
calibre-web | [2026-09-30 19:36:55,170] INFO {cps.remotelogin:32} Magic Link QRCode is enabled
calibre-web | [2026-09-30 19:36:55,415] INFO {cps.server:207} Starting Gevent server on [::]:8083
calibre-web | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web | ========== STARTING METADATA CHANGE DETECTOR ===========
calibre-web | [metadata-change-detector] Watching folder: /app/calibre-web-automated/metadata_change_logs
calibre-web | [cwa-checksum-backfill] Waiting for CWA service to be ready...
calibre-web | ========== STARTING CWA-INGEST SERVICE ==========
calibre-web | Setting up watches.
calibre-web | Watches established.
calibre-web | [cwa-ingest-service] Watching folder: /cwa-book-ingest
calibre-web | Setting up watches. Beware: since -r was given, this may take a while!
calibre-web | Watches established.
@@ -0,0 +1,8 @@
{
"calibre-web": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,40 @@
{
"harness_version": 4,
"edge": "N-calibre-web",
"app": "calibre-web",
"note": "names re-run 2026-09-30 (soak 0)",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kcalibre-web | [migrations] started",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": null,
"marks": [
"files_may_change"
],
"duration_s": 30.9,
"measured_at": "2026-09-30T17:37:58Z",
"evidence": "evidence/N-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/hdd/userdata/media/books",
"/srv/felhom-gate/import/calibre"
],
"files_changed": [
"/srv/felhom-gate/hdd/userdata/media/books"
],
"files_changed_detail": [
"/srv/felhom-gate/hdd/userdata/media/books/metadata.db (changed)",
"/srv/felhom-gate/hdd/userdata/media/books/metadata.db-shm (changed)",
"/srv/felhom-gate/hdd/userdata/media/books/metadata.db-wal (changed)"
],
"total_s": 127.2
}
@@ -0,0 +1,2 @@
Network probewanderer_wanderer-internal Removed
0
@@ -0,0 +1,8 @@
# wanderer probe on bench 9401, 2026-09-30 17:58-18:11 CEST (catalog template v0.20.0 / meilisearch v1.36.0, build_env values)
docker ps after 12 min: wanderer Up (unhealthy) | wanderer-db Up (healthy) | wanderer-search Up (healthy)
GET / (Host: hike.gate.invalid) on the web container :3000 -> 500 body: "Error 0: Something went wrong."
env in the web container: PUBLIC_POCKETBASE_URL=https://hike-db.gate.invalid
=> the web server calls the database at its PUBLIC name over https; the bench has no DNS name and no TLS for it,
so FROM can never settle healthy there (harness verdict would be `inconclusive` at FROM, never about the update).
API routes seen (src/routes/api/v1): auth/login, trail(+form/upload), list(+form), search, user, ... (a fixture route exists)
Not attempted: the meilisearch v1.36 -> v1.54 question (whether its index survives or is rebuilt) — not measured.
@@ -0,0 +1,15 @@
# wger probe on bench 9401, 2026-09-30 ~17:25-17:33 CEST (catalog template, wger/server:2.6, build_env values)
# Recorded from the session's probe output; tokens and passwords not recorded.
GET /api/v2/ -> 200 (router index: weightentry, userprofile, ... ; no login/token route)
POST /api/v2/login/, /api/v2/token(/), /api/v2/auth/login/ -> 404
POST /allauth/app/v1/auth/login wrong password -> 400 JSON "The username and/or password you specified are not correct"
POST /allauth/app/v1/auth/login RIGHT password -> 500 text/html
container log: allauth/core/internal/jwkkit.py line 34 load_pem -> ValueError: Unable to load PEM file ... MalformedFraming
settings/main.py:109 JWT_PRIVATE_KEY = env.str('JWT_PRIVATE_KEY', '') (the template sets none) -> R-737
after_install command (template's own, password as last argument) -> FELHOM_AFTER_INSTALL_OK
GET /en/user/login -> 200 (form: csrfmiddlewaretoken, login, password)
POST /en/user/login (Origin/Referer https://wger.gate.invalid) -> 302, sessionid set
POST /api/v2/weightentry/ {"date":"2026-09-30T10:00:00Z","weight":"77.35"} with session + X-CSRFToken -> 201
GET /api/v2/weightentry/?weight=77.35 -> 200 count 1 (positive)
GET /api/v2/weightentry/?weight=12.34 -> 200 count 0 (negative: a weight never entered)
GET /api/v2/weightentry/?weight=77.35 without session -> 403 (negative: no login)
@@ -0,0 +1,31 @@
# guest 9201 https://192.168.0.155 — read-only
adventurelog | update_order=None badge=None catalog_tested_at=2026-09-27T10:29:35Z
adventurelog: ghcr.io/seanmorley15/adventurelog-backend:v0.13.0 installed=0250d9cb0d74 at=2026-09-28T02:22:40Z catalog=0250d9cb0d74 equal=True
adventurelog-frontend: ghcr.io/seanmorley15/adventurelog-frontend:v0.13.0 installed=51ee22428b41 at=2026-09-28T02:22:40Z catalog=51ee22428b41 equal=True
adventurelog-postgres: postgis/postgis:16-3.5-alpine installed=47e961a569fd at=2026-09-13T19:07:19Z catalog=47e961a569fd equal=True
bentopdf | update_order=None badge=None catalog_tested_at=0001-01-01T00:00:00Z
bentopdf: ghcr.io/alam00000/bentopdf:v2.8.6 installed=eaeea1e44720 at=2026-09-06T08:36:22Z catalog=- equal=False
bookstack | update_order=None badge=None catalog_tested_at=2026-09-30T11:09:02Z
bookstack: lscr.io/linuxserver/bookstack:26.09.1 installed=99cd1f5707c1 at=2026-09-30T11:35:13Z catalog=99cd1f5707c1 equal=True
bookstack-db: mariadb:12.3 installed=805c8e104bd5 at=2026-09-22T09:05:22Z catalog=805c8e104bd5 equal=True
calibre-web | update_order=None badge=None catalog_tested_at=0001-01-01T00:00:00Z
calibre-web: crocodilestick/calibre-web-automated:v4.0.6 installed=c31a738b6d5e at=2026-09-03T00:30:19Z catalog=- equal=False
docmost | update_order=None badge=None catalog_tested_at=2026-09-25T12:01:05Z
docmost: docmost/docmost:0.96.0 installed=b56947fcfd08 at=2026-09-22T09:07:17Z catalog=b56947fcfd08 equal=True
docmost-postgres: postgres:18-alpine installed=77f585114c32 at=2026-09-26T02:19:18Z catalog=77f585114c32 equal=True
docmost-redis: redis:7-alpine installed=858f009f9709 at=2026-09-22T09:07:17Z catalog=858f009f9709 equal=True
kimai | update_order=None badge=None catalog_tested_at=2026-09-30T11:25:04Z
kimai: kimai/kimai2:2.67.0 installed=3084f1e5ecdc at=2026-09-30T11:36:28Z catalog=3084f1e5ecdc equal=True
kimai-db: mariadb:11.8 installed=79d59758afc9 at=2026-09-23T21:19:40Z catalog=79d59758afc9 equal=True
opengist | update_order=None badge=None catalog_tested_at=2026-09-23T19:39:21Z
opengist: ghcr.io/thomiceli/opengist:1.15 installed=7edc91273ee7 at=2026-09-23T21:18:27Z catalog=7edc91273ee7 equal=True
paperless-ngx | update_order=None badge=None catalog_tested_at=2026-09-27T09:50:50Z
paperless-postgres: postgres:18-alpine installed=77f585114c32 at=2026-09-28T02:23:49Z catalog=77f585114c32 equal=True
paperless-redis: redis:7-alpine installed=858f009f9709 at=2026-09-23T00:31:38Z catalog=858f009f9709 equal=True
paperless-webserver: ghcr.io/paperless-ngx/paperless-ngx:2.20.15 installed=6c86cad80397 at=2026-09-03T00:31:09Z catalog=6c86cad80397 equal=True
privatebin | update_order=None badge=None catalog_tested_at=2026-09-21T18:19:14.04413Z
privatebin: privatebin/pdo:2.0.6 installed=4c141b2326f8 at=2026-09-22T09:07:38Z catalog=4c141b2326f8 equal=True
romm | update_order=None badge=None catalog_tested_at=2026-09-23T20:00:03Z
romm: rommapp/romm:5.3.1 installed=0d66b4ea152a at=2026-09-23T21:21:09Z catalog=0d66b4ea152a equal=True
romm-db: mariadb:11.8 installed=79d59758afc9 at=2026-09-23T21:21:09Z catalog=79d59758afc9 equal=True
romm-redis: redis:7-alpine installed=858f009f9709 at=2026-09-22T09:08:58Z catalog=858f009f9709 equal=True
@@ -0,0 +1,20 @@
=== RUN TestPartC_DigestOnlyBehindAtHead
partc_scratch_test.go:29: 1. CatalogOrder = 2 (catalog digests map[web:sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa], tested 2026-09-29 00:00:00 +0000 UTC; installed {Ref:nextcloud:34.0.1-apache Digest:sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb At:2026-09-20T00:00:00Z})
partc_scratch_test.go:32: 2. night leg: presses=0 step={App:nextcloud Outcome:skipped Reason:no_test_record From:map[] To:map[] Seconds:0}
partc_scratch_test.go:35: log: [INFO] [update-leg] started (test): window 02:30, no step starts at or after 07:30
partc_scratch_test.go:35: log: [INFO] [update-leg] nextcloud: skipped — no_test_record
partc_scratch_test.go:35: log: [INFO] [update-leg] update leg (test): done=0 undone=0 held=0 failed=0 skipped=1 in 0s [skipped: nextcloud=no_test_record]
partc_scratch_test.go:45: 3. Update button: phase=done err="" presses=1; live compose pins the tested digest dA: true; pin=nextcloud:34.0.1-apache
--- PASS: TestPartC_DigestOnlyBehindAtHead (0.01s)
=== RUN TestPartC_IfTheCatalogWroteARefreshEntry
partc_scratch_test.go:66: 1. CatalogOrder = 2
partc_scratch_test.go:70: 2. night leg: presses=1 step={App:nextcloud Outcome:done Reason: From:map[web:nextcloud:34.0.1-apache] To:map[web:nextcloud:34.0.1-apache] Seconds:0}; live compose pins dA: true
partc_scratch_test.go:73: log: [INFO] [update-leg] started (test): window 02:30, no step starts at or after 07:30
partc_scratch_test.go:73: log: [INFO] [update-leg] nextcloud: step pressed web=nextcloud:34.0.1-apache → web=nextcloud:34.0.1-apache
partc_scratch_test.go:73: log: [INFO] [stacks] update nextcloud: ladder — the last step (2 of 2) — the catalog's current definition
partc_scratch_test.go:73: log: [INFO] [update-leg] nextcloud: step ended done after 0.0 s
partc_scratch_test.go:73: log: [INFO] [update-leg] update leg (test): done=1 undone=0 held=0 failed=0 skipped=0 in 0s [skipped: ]
partc_scratch_test.go:77: 3. the next night: presses=1 step={App: Outcome: Reason: From:map[] To:map[] Seconds:0}
--- PASS: TestPartC_IfTheCatalogWroteARefreshEntry (0.01s)
PASS
ok gitea.dooplex.hu/admin/felhom-controller/internal/stacks 0.027s
@@ -0,0 +1,78 @@
package stacks
// SCRATCH (not committed; a copy of controller d48da6c in the scratchpad) — Part C, 2026-09-30:
// what the night leg and the Update button do with an app AT THE HEAD TAG whose catalog carries a
// NEWER tested digest for that same tag (a same-name repush the catalog re-tested).
import (
"path/filepath"
"strings"
"testing"
)
func TestPartC_DigestOnlyBehindAtHead(t *testing.T) {
m, dir, _, ups, logBuf := legManager(t)
catDir := filepath.Dir(m.CatalogTemplatePath("nextcloud", "docker-compose.yml"))
// the ladder: B -> C tested at digest dA, tested 2026-09-29
mustWrite(t, filepath.Join(catDir, ".felhom.yml"), "display_name: Nextcloud\nupdate_ladder:\n"+
` - {"from": {"web": "`+ladderB+`"}, "to": {"web": "`+ladderC+`"}, "digest": {"web": "`+dA+`"}, "verdict": "proven", "tested_at": "2026-09-29T00:00:00Z"}`+"\n")
// the box: at C (the head tag), running the OLDER digest dB, installed 2026-09-20
cur := "services:\n web:\n image: " + ladderC + "@" + dB + "\nvolumes:\n db:\n"
mustWrite(t, ComposePathIn(dir), cur)
mustWrite(t, AppliedComposePath(dir), cur)
mustWrite(t, filepath.Join(dir, "app.yaml"), "deployed: true\nenv: {}\npinned_images:\n web: "+ladderC+
"\ninstalled_images:\n web:\n ref: "+ladderC+"\n digest: "+dB+"\n at: \"2026-09-20T00:00:00Z\"\n")
if err := m.ScanStacks(); err != nil {
t.Fatal(err)
}
st, _ := m.GetStack("nextcloud")
t.Logf("1. CatalogOrder = %v (catalog digests %v, tested %v; installed %+v)", CatalogOrder(*st), st.CatalogDigests, st.CatalogTestedAt, st.AppConfig.InstalledImages["web"])
legOpts(m, nil)
s := mustLeg(t, m)
t.Logf("2. night leg: presses=%d step=%+v", len(*ups), legStepFor(s, "nextcloud"))
for _, l := range strings.Split(logBuf.String(), "\n") {
if strings.Contains(l, "update-leg") {
t.Logf(" log: %s", l)
}
}
// 3. the household's Update button
if err := m.StartGuardedUpdate("nextcloud"); err != nil {
t.Logf("3. Update button refused: %v", err)
return
}
st2 := waitUpdateDone(t, m, "nextcloud")
body := fileBody(t, ComposePathIn(dir))
t.Logf("3. Update button: phase=%s err=%q presses=%d; live compose pins the tested digest dA: %v; pin=%s",
st2.UpdatePhase, st2.UpdateError, len(*ups), strings.Contains(body, ladderC+"@"+dA), pinOf(t, dir))
}
// Option (a)'s box half, measured before it is costed: IF the catalog carried a same-tag re-test
// (from == to == C, tested at the new digest dA, newer than the install), what would the leg do?
func TestPartC_IfTheCatalogWroteARefreshEntry(t *testing.T) {
m, dir, _, ups, logBuf := legManager(t)
catDir := filepath.Dir(m.CatalogTemplatePath("nextcloud", "docker-compose.yml"))
mustWrite(t, filepath.Join(catDir, ".felhom.yml"), "display_name: Nextcloud\nupdate_ladder:\n"+
` - {"from": {"web": "`+ladderB+`"}, "to": {"web": "`+ladderC+`"}, "digest": {"web": "`+dB+`"}, "verdict": "proven", "tested_at": "2026-09-19T00:00:00Z"}`+"\n"+
` - {"from": {"web": "`+ladderC+`"}, "to": {"web": "`+ladderC+`"}, "digest": {"web": "`+dA+`"}, "verdict": "proven", "tested_at": "2026-09-29T00:00:00Z"}`+"\n")
cur := "services:\n web:\n image: " + ladderC + "@" + dB + "\nvolumes:\n db:\n"
mustWrite(t, ComposePathIn(dir), cur)
mustWrite(t, AppliedComposePath(dir), cur)
mustWrite(t, filepath.Join(dir, "app.yaml"), "deployed: true\nenv: {}\npinned_images:\n web: "+ladderC+
"\ninstalled_images:\n web:\n ref: "+ladderC+"\n digest: "+dB+"\n at: \"2026-09-20T00:00:00Z\"\n")
if err := m.ScanStacks(); err != nil {
t.Fatal(err)
}
st, _ := m.GetStack("nextcloud")
t.Logf("1. CatalogOrder = %v", CatalogOrder(*st))
legOpts(m, nil)
s := mustLeg(t, m)
body := fileBody(t, ComposePathIn(dir))
t.Logf("2. night leg: presses=%d step=%+v; live compose pins dA: %v", len(*ups), legStepFor(s, "nextcloud"), strings.Contains(body, ladderC+"@"+dA))
for _, l := range strings.Split(logBuf.String(), "\n") {
if strings.Contains(l, "update-leg") || strings.Contains(l, "step") {
t.Logf(" log: %s", l)
}
}
s2 := mustLeg(t, m)
t.Logf("3. the next night: presses=%d step=%+v", len(*ups), legStepFor(s2, "nextcloud"))
}
@@ -0,0 +1,60 @@
# floating lines in the live catalog, read 2026-09-30T15:07:34+00:00
ghcr.io/claperco/claper:2.5 last pushed: no anonymous timestamp on ghcr.io
registry digest today: sha256:4f733dc50b0c
claper/claper: = tested
ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0 last pushed: no anonymous timestamp on ghcr.io
registry digest today: sha256:1a078b237c1d
immich/immich-postgres: = tested
ghcr.io/thomiceli/opengist:1.15 last pushed: no anonymous timestamp on ghcr.io
registry digest today: sha256:7edc91273ee7
opengist/opengist: = tested
mariadb:11.8 last pushed: 2026-09-18T02:36:51.573083Z (12 days ago)
registry digest today: sha256:79d59758afc9
kimai/kimai-db: = tested
romm/romm-db: = tested
mariadb:12.3 last pushed: 2026-09-18T02:37:26.402424Z (12 days ago)
registry digest today: sha256:805c8e104bd5
bookstack/bookstack-db: = tested
nextcloud/nextcloud-db: = tested
postgis/postgis:16-3.5-alpine last pushed: 2026-08-31T11:37:24.0266Z (30 days ago)
registry digest today: sha256:47e961a569fd
adventurelog/adventurelog-postgres: = tested
postgres:16-alpine last pushed: 2026-09-21T04:07:46.010722Z (9 days ago)
registry digest today: sha256:721873c34ceb
zipline/zipline-postgres: no ladder digest
postgres:17-alpine last pushed: 2026-09-21T04:08:17.149523Z (9 days ago)
registry digest today: sha256:b0f9560a2de0
claper/claper-postgres: = tested
tandoor/tandoor-postgres: = tested
postgres:18-alpine last pushed: 2026-09-21T01:08:20.384039Z (9 days ago)
registry digest today: sha256:77f585114c32
calcom/calcom-postgres: = tested
docmost/docmost-postgres: = tested
outline/outline-postgres: = tested
paperless-ngx/paperless-postgres: = tested
rallly/rallly-postgres: = tested
sparkyfitness/sparkyfitness-db: = tested
redis:7-alpine last pushed: 2026-09-21T12:04:40.637995Z (9 days ago)
registry digest today: sha256:858f009f9709
docmost/docmost-redis: = tested
immich/immich-redis: = tested
nextcloud/nextcloud-redis: = tested
outline/outline-redis: = tested
paperless-ngx/paperless-redis: = tested
romm/romm-redis: = tested
wger/server:2.6 last pushed: 2026-06-17T08:41:05.968586Z (105 days ago)
registry digest today: sha256:997ead43aabd
wger/wger: no ladder digest
# 11 distinct floating lines; Docker Hub lines pushed within 30 days: 7
@@ -0,0 +1,5 @@
# ladders: any entry with from == to (a same-tag re-test), or two entries with the same `to` (a re-test at a new digest)?
from == to entries: none
same `to` twice: none
ladder.check_entry(from == to): no problem found
step_file(to) for the old head and a same-tag re-test are the SAME path: steps/09d1fdf5e748a56c.yml
@@ -0,0 +1,169 @@
[17:17:59] scratch drive folders cleared before FROM (R-656): none existed
[17:17:59] D-immich-0b82-768: deploying immich at FROM {'immich-server': 'ghcr.io/immich-app/immich-server:v3.0.3', 'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.0.3', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine'}
[17:19:34] FROM settled=True in 31.4s :: {"immich-machine-learning": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:19:34] fixture: the BOX walk's own (Immich), through upgrade_boxport
[17:19:34] immich: seeded album drillalbumcb179b80
[17:19:35] immich: readback found=True (http 200, control passed)
[17:19:35] C1 (seed reads back BEFORE): True
[17:19:35] D-immich-0b82-768: swapping to TO {'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.2', 'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.0.3', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine'}
[17:19:36] TO up -d rc=0
[17:20:08] TO settled=True in 31.5s :: {"immich-machine-learning": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:20:08] engine state immich-postgres: 16
[17:20:08] migration lines observed: 6
[17:20:08] immich: readback found=True (http 200, control passed)
[17:20:08] RESULT (seed reads back AFTER): True
[17:20:09] files_may_change — the files: ['/srv/felhom-gate/hdd/appdata/immich/backups/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/encoded-video/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/library/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/profile/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/thumbs/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/upload/.immich (changed)']
[17:20:09] files_may_change: the bind-mounted tree changed under ['/srv/felhom-gate/hdd/appdata/immich']
[17:20:09] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:2283
[17:20:24] + 15s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=723M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1460M/2048M peak=1631M kills=0 rs=0 reqs=304
[17:20:39] + 30s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=707M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1471M/2048M peak=1631M kills=0 rs=0 reqs=604
[17:20:55] + 46s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=703M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1467M/2048M peak=1631M kills=0 rs=0 reqs=904
[17:21:10] + 61s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1494M/2048M peak=1631M kills=0 rs=0 reqs=1204
[17:21:25] + 76s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1494M/2048M peak=1631M kills=0 rs=0 reqs=1507
[17:21:40] + 91s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1357M/2048M peak=1631M kills=0 rs=0 reqs=1808
[17:21:55] + 106s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1111M/2048M peak=1631M kills=0 rs=0 reqs=2108
[17:22:11] + 122s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1113M/2048M peak=1631M kills=0 rs=0 reqs=2408
[17:22:26] + 137s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1116M/2048M peak=1631M kills=0 rs=0 reqs=2708
[17:22:41] + 152s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1083M/2048M peak=1631M kills=0 rs=0 reqs=3008
[17:22:56] + 167s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1083M/2048M peak=1631M kills=0 rs=0 reqs=3308
[17:23:11] + 182s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1084M/2048M peak=1631M kills=0 rs=0 reqs=3608
[17:23:26] + 197s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1075M/2048M peak=1631M kills=0 rs=0 reqs=3912
[17:23:42] + 213s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1074M/2048M peak=1631M kills=0 rs=0 reqs=4212
[17:23:57] + 228s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=705M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1071M/2048M peak=1631M kills=0 rs=0 reqs=4512
[17:24:12] + 243s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=715M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1068M/2048M peak=1631M kills=0 rs=0 reqs=4812
[17:24:27] + 258s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=731M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1074M/2048M peak=1631M kills=0 rs=0 reqs=5112
[17:24:42] + 273s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=741M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1078M/2048M peak=1631M kills=0 rs=0 reqs=5412
[17:24:58] + 288s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=748M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1074M/2048M peak=1631M kills=0 rs=0 reqs=5712
[17:25:13] + 304s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=754M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1072M/2048M peak=1631M kills=0 rs=0 reqs=6016
[17:25:28] + 319s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=754M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1073M/2048M peak=1631M kills=0 rs=0 reqs=6316
[17:25:43] + 334s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=764M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1075M/2048M peak=1631M kills=0 rs=0 reqs=6616
[17:25:58] + 349s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=767M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1072M/2048M peak=1631M kills=0 rs=0 reqs=6916
[17:26:14] + 364s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=763M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1072M/2048M peak=1631M kills=0 rs=0 reqs=7216
[17:26:29] + 380s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=767M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1075M/2048M peak=1631M kills=0 rs=0 reqs=7516
[17:26:44] + 395s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=763M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1076M/2048M peak=1631M kills=0 rs=0 reqs=7820
[17:26:59] + 410s immich-machine-learning=249M/1536M peak=265M kills=0 rs=0 immich-postgres=763M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1077M/2048M peak=1631M kills=0 rs=0 reqs=8120
[17:27:14] + 425s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1078M/2048M peak=1631M kills=0 rs=0 reqs=8420
[17:27:29] + 440s immich-machine-learning=249M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1079M/2048M peak=1631M kills=0 rs=0 reqs=8720
[17:27:45] + 456s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1079M/2048M peak=1631M kills=0 rs=0 reqs=9020
[17:28:00] + 471s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1081M/2048M peak=1631M kills=0 rs=0 reqs=9324
[17:28:15] + 486s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1080M/2048M peak=1631M kills=0 rs=0 reqs=9624
[17:28:30] + 501s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1081M/2048M peak=1631M kills=0 rs=0 reqs=9924
[17:28:45] + 516s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1081M/2048M peak=1631M kills=0 rs=0 reqs=10224
[17:29:01] + 532s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=10524
[17:29:16] + 547s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=10824
[17:29:31] + 562s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=11124
[17:29:46] + 577s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=11426
[17:30:01] + 592s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=761M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1083M/2048M peak=1631M kills=0 rs=0 reqs=11728
[17:30:17] + 607s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=761M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=12028
[17:30:17] memory watch: killed=False tight=[] requests=12028 codes={'200': 12028}
[17:30:17] D-immich-0b82-768: ABORT — putting the FROM images back
[17:33:20] ABORT: the app did NOT come back (rc=0, 181.6s)
{
"harness_version": 4,
"edge": "D-immich-0b82-768",
"app": "immich",
"note": "Part D 2026-09-30: step 0b8272068aab36bf's own definition, immich-postgres 512M -> 768M (R-732)",
"from": {
"immich-server": "ghcr.io/immich-app/immich-server:v3.0.3",
"immich-machine-learning": "ghcr.io/immich-app/immich-machine-learning:v3.0.3",
"immich-postgres": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"immich-redis": "redis:7-alpine"
},
"to": {
"immich-server": "ghcr.io/immich-app/immich-server:v3.2.2",
"immich-machine-learning": "ghcr.io/immich-app/immich-machine-learning:v3.0.3",
"immich-postgres": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"immich-redis": "redis:7-alpine"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kimmich-server | \u001b[32m[Nest] 7 - \u001b[39m09/30/2026, 7:19:45 PM \u001b[32m LOG\u001b[39m \u001b[33m[Microservices:DatabaseRepository]\u001b[39m \u001b[32mRunning migrations\u001b[39m",
"abort": "refuses",
"abort_detail": "18:54.244 CEST [72] LOG: database system was shut down at 2026-09-30 19:18:54 CEST\n\u001b[2Kimmich-postgres | 2026-09-30 19:18:54.259 CEST [1] LOG: database system is ready to accept connections\n\u001b[2Kimmich-postgres | 2026-09-30 19:19:07.602 CEST [95] ERROR: relation \"system_metadata\" does not exist at character 21\n\u001b[2Kimmich-postgres | 2026-09-30 19:19:07.602 CEST [95] STATEMENT: select \"value\" from \"system_metadata\" where \"key\" = $1\n\u001b[2Kimmich-postgres | 2026-09-30 19:23:54.345 CEST [70] LOG: checkpoint starting: time\n\u001b[2Kimmich-postgres | 2026-09-30 19:28:24.197 CEST [70] LOG: checkpoint complete: wrote 16951 buffers (25.9%); 0 WAL file(s) added, 0 removed, 16 recycled; write=269.713 s, sync=0.077 s, total=269.853 s; sync files=769, longest=0.007 s, average=0.001 s; distance=269095 kB, estimate=269095 kB; lsn=0/11F98B70, redo lsn=0/11F98B38",
"engine_state_after": {
"immich-postgres": {
"image": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"probe": "datadir major version",
"answer": "16",
"probe_rc": 0
}
},
"memory": {
"soak_s": 607.7,
"requested_s": 600,
"requests": 12028,
"codes": {
"200": 12028
},
"first_kill": null,
"containers": {
"immich-machine-learning": {
"limit": 1610612736,
"peak": 278474752,
"peak_pct": 0.173,
"anon_peak_sampled": 246366208,
"anon_peak_pct": 0.153,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
},
"immich-postgres": {
"limit": 805306368,
"peak": 805638144,
"peak_pct": 1.0,
"anon_peak_sampled": 238280704,
"anon_peak_pct": 0.296,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
},
"immich-redis": {
"limit": 134217728,
"peak": 18083840,
"peak_pct": 0.135,
"anon_peak_sampled": 4100096,
"anon_peak_pct": 0.031,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
},
"immich-server": {
"limit": 2147483648,
"peak": 1711157248,
"peak_pct": 0.797,
"anon_peak_sampled": 1054654464,
"anon_peak_pct": 0.491,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [
"files_may_change"
],
"duration_s": 31.5,
"measured_at": "2026-09-30T17:33:20Z",
"evidence": "evidence/D-immich-0b82-768",
"scratch_cleared": [],
"files_changed": [
"/srv/felhom-gate/hdd/appdata/immich"
],
"files_changed_detail": [
"/srv/felhom-gate/hdd/appdata/immich/backups/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/encoded-video/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/library/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/profile/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/thumbs/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/upload/.immich (changed)"
],
"total_s": 921.3
}
@@ -0,0 +1,162 @@
# hub read-only 2026-09-30T15:10:48Z: /hosts lists 3 hosts
## demo-felhom-8363b5: page 43171 bytes; immich mentions: 0
## demo-hp-bb76ea: page 42570 bytes; immich mentions: 0
## drill-r50-0a4f9a: page 26198 bytes; immich mentions: 0
## demo-felhom-8363b5 positive controls: bookstack=0 paperless=0 kimai=0 nextcloud=0
## demo-hp-bb76ea positive controls: bookstack=0 paperless=0 kimai=0 nextcloud=0
## drill-r50-0a4f9a positive controls: bookstack=0 paperless=0 kimai=0 nextcloud=0
## GET /apps (fleet app list) — text rendering:
Apps — Felhom Hub
Felhom Hub
Dashboard
Customers
Apps
Hosts
Offsite
Configuration
App Telemetry
24h
7d
30d
14
Total Apps
18
Deployments
8
Apps with Errors
App
Deployments
Avg Memory
P95 Memory
Catalog Estimate
Catalog Limit
Accuracy
Errors
Warnings
Felhom Controller
3
81 MB
147 MB
—
—
—
44
163
OpenGist
2
23 MB
27 MB
30M
128M
2
0
BookStack
2
155 MB
226 MB
150M
512M
1
159
Vikunja
1
50 MB
104 MB
50M
256M
0
26
ActualBudget
1
87 MB
167 MB
50M
256M
0
0
BentoPDF
1
5 MB
9 MB
100M
384M
0
0
Calibre-Web Automated
1
171 MB
294 MB
200M
768M
72
184
Nextcloud
1
295 MB
321 MB
256M
1024M
0
12
Docmost
1
411 MB
458 MB
200M
896M
364
74
Paperless-ngx
1
540 MB
585 MB
500M
1664M
84
6
RomM
1
690 MB
766 MB
300M
1280M
0
87
PrivateBin
1
38 MB
45 MB
## GET /hosts — text rendering (report age):
demo-felhom-8363b5
Demo Ügyfél
0.138.0
ONLINE
1/2
0%
16%
29%
inactive
29% local
demo-hp-bb76ea
Demo HP
0.138.0
ONLINE
1/2
8%
21%
61%
inactive
62% local-lvm
drill-r50-0a4f9a
drill-r50
0.129.0 floor held
DOWN
1/1
20%
20%
10%
inactive
10% local
Felhom Hub 0.126.0
@@ -0,0 +1,36 @@
# geodata shipped inside each immich-server image (bench 9401, 2026-09-30T16:07:16Z)
## v3.0.3 digest ghcr.io/immich-app/immich-server@sha256:c716dc20f957aafd89fa9d284a2ec63e25c9e2d8d8e87c6197
total 55108
drwxr-xr-x 2 root root 4096 Jul 13 20:32 .
drwxr-xr-x 1 root root 4096 Jul 15 14:37 ..
-r--r--r-- 1 root root 151572 Jul 13 01:29 admin1CodesASCII.txt
-r--r--r-- 1 root root 2370419 Jul 13 01:29 admin2Codes.txt
-r--r--r-- 1 root root 40599782 Jul 13 03:22 cities500.txt
-r--r--r-- 1 root root 25 Jul 13 20:32 geodata-date.txt
-r--r--r-- 1 root root 13287234 Jan 1 1970 ne_10m_admin_0_countries.geojson
geodata-date: 2026-07-13T20:32:48+00:00
/build/geodata/cities500.txt lines=234900 sha256=6047c30ba447e8d2
## v3.2.2 digest ghcr.io/immich-app/immich-server@sha256:79cc1623323d5894922686d8743b4780181428f98eecbfb58c
total 55316
drwxr-xr-x 2 root root 4096 Aug 30 09:13 .
drwxr-xr-x 1 root root 4096 Sep 15 20:17 ..
-r--r--r-- 1 root root 151536 Aug 30 02:43 admin1CodesASCII.txt
-r--r--r-- 1 root root 2372955 Aug 30 02:43 admin2Codes.txt
-r--r--r-- 1 root root 40781686 Aug 30 04:35 cities500.txt
-r--r--r-- 1 root root 31678 Aug 30 02:49 countryInfo.txt
-r--r--r-- 1 root root 25 Aug 30 09:13 geodata-date.txt
-r--r--r-- 1 root root 13287234 Jan 1 1970 ne_10m_admin_0_countries.geojson
geodata-date: 2026-08-30T09:13:55+00:00
/build/geodata/cities500.txt lines=235552 sha256=5afa146e5f64d2c9
## v3.2.4 digest ghcr.io/immich-app/immich-server@sha256:d317916b28090c33eb36b308464ea391f8b7df1d850fcfea22
total 56120
drwxr-xr-x 2 root root 4096 Sep 28 15:51 .
drwxr-xr-x 1 root root 4096 Sep 28 16:55 ..
-r--r--r-- 1 root root 151583 Sep 28 01:52 admin1CodesASCII.txt
-r--r--r-- 1 root root 2375171 Sep 28 01:52 admin2Codes.txt
-r--r--r-- 1 root root 41600853 Sep 28 03:45 cities500.txt
-r--r--r-- 1 root root 31678 Sep 28 01:57 countryInfo.txt
-r--r--r-- 1 root root 25 Sep 28 15:51 geodata-date.txt
-r--r--r-- 1 root root 13287234 Jan 1 1970 ne_10m_admin_0_countries.geojson
geodata-date: 2026-09-28T15:51:37+00:00
/build/geodata/cities500.txt lines=235876 sha256=bc7631917832f176
@@ -0,0 +1,6 @@
55: memory: 2048M
84: memory: 1536M
109: memory: 768M
131: memory: 128M
swap lines above (none = no swap)
rc=0
@@ -0,0 +1,110 @@
immich-machine-learning | [09/30/26 19:18:54] INFO  Starting gunicorn 25.3.0
immich-machine-learning | [09/30/26 19:18:54] INFO  Listening at: http://[::]:3003 (13)
immich-machine-learning | [09/30/26 19:18:54] INFO  Using worker: immich_ml.config.CustomUvicornWorker
immich-machine-learning | [09/30/26 19:18:54] INFO  Booting worker with pid: 19
immich-machine-learning | [09/30/26 19:18:57] INFO  Started server process [19]
immich-machine-learning | [09/30/26 19:18:57] INFO  Waiting for application startup.
immich-machine-learning | [09/30/26 19:18:57] INFO  Created in-memory cache with unloading after 300s
immich-machine-learning |   of inactivity.
immich-machine-learning | [09/30/26 19:18:57] INFO  Initialized request thread pool with 8 threads.
immich-machine-learning | [09/30/26 19:18:57] INFO  Application startup complete.
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-redis | 1:C 30 Sep 2026 19:18:52.334 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
immich-server | Starting api worker
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * Configuration loaded
immich-redis | 1:M 30 Sep 2026 19:18:52.335 * monotonic clock: POSIX clock_gettime
immich-redis | 1:M 30 Sep 2026 19:18:52.337 * Running mode=standalone, port=6379.
immich-redis | 1:M 30 Sep 2026 19:18:52.337 * Server initialized
immich-redis | 1:M 30 Sep 2026 19:18:52.341 * Creating AOF base file appendonly.aof.1.base.rdb on server start
immich-redis | 1:M 30 Sep 2026 19:18:52.348 * Creating AOF incr file appendonly.aof.1.incr.aof on server start
immich-redis | 1:M 30 Sep 2026 19:18:52.348 * Ready to accept connections tcp
immich-redis | 1:M 30 Sep 2026 19:23:53.011 * 100 changes in 300 seconds. Saving...
immich-server | Starting microservices worker
immich-redis | 1:M 30 Sep 2026 19:23:53.012 * Background saving started by pid 190
immich-redis | 190:C 30 Sep 2026 19:23:53.019 * DB saved on disk
immich-redis | 190:C 30 Sep 2026 19:23:53.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
immich-redis | 1:M 30 Sep 2026 19:23:53.113 * Background saving terminated with success
immich-redis | 1:M 30 Sep 2026 19:28:54.051 * 100 changes in 300 seconds. Saving...
immich-redis | 1:M 30 Sep 2026 19:28:54.052 * Background saving started by pid 371
immich-redis | 371:C 30 Sep 2026 19:28:54.062 * DB saved on disk
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-redis | 371:C 30 Sep 2026 19:28:54.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
immich-postgres | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
immich-postgres | 2026-09-30 17:18:53.381 GMT [48] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:53.382 GMT [48] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | waiting for server to start....2026-09-30 17:18:53.429 GMT [53] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:53.430 GMT [53] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 19:18:53.479 CEST [53] LOG: starting PostgreSQL 16.10 (Debian 16.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
immich-postgres | 2026-09-30 19:18:53.486 CEST [53] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
immich-redis | 1:M 30 Sep 2026 19:28:54.153 * Background saving terminated with success
immich-postgres | 2026-09-30 19:18:53.506 CEST [56] LOG: database system was shut down at 2026-09-30 19:18:53 CEST
immich-postgres | 2026-09-30 19:18:53.519 CEST [53] LOG: database system is ready to accept connections
immich-postgres | done
immich-postgres | server started
immich-postgres | CREATE DATABASE
immich-postgres |
immich-postgres |
immich-postgres | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
immich-postgres |
immich-postgres | waiting for server to shut down...2026-09-30 19:18:53.959 CEST [53] LOG: received fast shutdown request
immich-postgres | .2026-09-30 19:18:53.964 CEST [53] LOG: aborting any active transactions
immich-postgres | 2026-09-30 19:18:53.970 CEST [53] LOG: background worker "logical replication launcher" (PID 62) exited with exit code 1
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-postgres | 2026-09-30 19:18:53.971 CEST [54] LOG: shutting down
immich-postgres | 2026-09-30 19:18:53.974 CEST [54] LOG: checkpoint starting: shutdown immediate
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-postgres | 2026-09-30 19:18:54.069 CEST [54] LOG: checkpoint complete: wrote 922 buffers (1.4%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.035 s, sync=0.048 s, total=0.098 s; sync files=301, longest=0.017 s, average=0.001 s; distance=1672 kB, estimate=1672 kB; lsn=0/18CED10, redo lsn=0/18CED10
immich-postgres | 2026-09-30 19:18:54.092 CEST [53] LOG: database system is shut down
immich-postgres | done
immich-postgres | server stopped
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-postgres |
immich-postgres | PostgreSQL init process complete; ready for start up.
immich-postgres |
immich-postgres | 2026-09-30 17:18:54.182 GMT [1] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:54.182 GMT [1] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: starting PostgreSQL 16.10 (Debian 16.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: listening on IPv6 address "::", port 5432
immich-postgres | 2026-09-30 19:18:54.232 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
immich-postgres | 2026-09-30 19:18:54.244 CEST [72] LOG: database system was shut down at 2026-09-30 19:18:54 CEST
immich-postgres | 2026-09-30 19:18:54.259 CEST [1] LOG: database system is ready to accept connections
immich-postgres | 2026-09-30 19:19:07.602 CEST [95] ERROR: relation "system_metadata" does not exist at character 21
immich-postgres | 2026-09-30 19:19:07.602 CEST [95] STATEMENT: select "value" from "system_metadata" where "key" = $1
immich-postgres | 2026-09-30 19:23:54.345 CEST [70] LOG: checkpoint starting: time
immich-postgres | 2026-09-30 19:28:24.197 CEST [70] LOG: checkpoint complete: wrote 16951 buffers (25.9%); 0 WAL file(s) added, 0 removed, 16 recycled; write=269.713 s, sync=0.077 s, total=269.853 s; sync files=769, longest=0.007 s, average=0.001 s; distance=269095 kB, estimate=269095 kB; lsn=0/11F98B70, redo lsn=0/11F98B38
@@ -0,0 +1,26 @@
{
"immich-machine-learning": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
},
"immich-postgres": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
},
"immich-redis": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
},
"immich-server": {
"status": "restarting",
"health": "unhealthy",
"restarts": 0,
"exit": 1
}
}
@@ -0,0 +1,487 @@
immich-redis | 1:C 30 Sep 2026 19:18:52.334 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * Configuration loaded
immich-redis | 1:M 30 Sep 2026 19:18:52.335 * monotonic clock: POSIX clock_gettime
immich-redis | 1:M 30 Sep 2026 19:18:52.337 * Running mode=standalone, port=6379.
immich-redis | 1:M 30 Sep 2026 19:18:52.337 * Server initialized
immich-redis | 1:M 30 Sep 2026 19:18:52.341 * Creating AOF base file appendonly.aof.1.base.rdb on server start
immich-redis | 1:M 30 Sep 2026 19:18:52.348 * Creating AOF incr file appendonly.aof.1.incr.aof on server start
immich-redis | 1:M 30 Sep 2026 19:18:52.348 * Ready to accept connections tcp
immich-redis | 1:M 30 Sep 2026 19:23:53.011 * 100 changes in 300 seconds. Saving...
immich-redis | 1:M 30 Sep 2026 19:23:53.012 * Background saving started by pid 190
immich-redis | 190:C 30 Sep 2026 19:23:53.019 * DB saved on disk
immich-redis | 190:C 30 Sep 2026 19:23:53.020 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
immich-redis | 1:M 30 Sep 2026 19:23:53.113 * Background saving terminated with success
immich-redis | 1:M 30 Sep 2026 19:28:54.051 * 100 changes in 300 seconds. Saving...
immich-redis | 1:M 30 Sep 2026 19:28:54.052 * Background saving started by pid 371
immich-redis | 371:C 30 Sep 2026 19:28:54.062 * DB saved on disk
immich-redis | 371:C 30 Sep 2026 19:28:54.063 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
immich-redis | 1:M 30 Sep 2026 19:28:54.153 * Background saving terminated with success
immich-machine-learning | [09/30/26 19:18:54] INFO  Starting gunicorn 25.3.0
immich-machine-learning | [09/30/26 19:18:54] INFO  Listening at: http://[::]:3003 (13)
immich-machine-learning | [09/30/26 19:18:54] INFO  Using worker: immich_ml.config.CustomUvicornWorker
immich-machine-learning | [09/30/26 19:18:54] INFO  Booting worker with pid: 19
immich-machine-learning | [09/30/26 19:18:57] INFO  Started server process [19]
immich-machine-learning | [09/30/26 19:18:57] INFO  Waiting for application startup.
immich-machine-learning | [09/30/26 19:18:57] INFO  Created in-memory cache with unloading after 300s
immich-machine-learning |   of inactivity.
immich-machine-learning | [09/30/26 19:18:57] INFO  Initialized request thread pool with 8 threads.
immich-machine-learning | [09/30/26 19:18:57] INFO  Application startup complete.
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:30:26 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-postgres | Using SSD storage
immich-server | [Nest] 7 - 09/30/2026, 7:30:26 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:26 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:26 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:30:27 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-postgres | The files belonging to this database system will be owned by user "postgres".
immich-postgres | This user must also own the server process.
immich-postgres |
immich-postgres | The database cluster will be initialized with locale "en_US.utf8".
immich-postgres | The default database encoding has accordingly been set to "UTF8".
immich-postgres | The default text search configuration will be set to "english".
immich-postgres |
immich-postgres | Data page checksums are enabled.
immich-postgres |
immich-postgres | fixing permissions on existing directory /var/lib/postgresql/data ... ok
immich-postgres | creating subdirectories ... ok
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-postgres | selecting dynamic shared memory implementation ... posix
immich-postgres | selecting default max_connections ... 100
immich-postgres | selecting default shared_buffers ... 128MB
immich-postgres | selecting default time zone ... Europe/Budapest
immich-postgres | creating configuration files ... ok
immich-postgres | running bootstrap script ... ok
immich-postgres | performing post-bootstrap initialization ... ok
immich-postgres | syncing data to disk ... ok
immich-postgres |
immich-postgres |
immich-postgres | Success. You can now start the database server using:
immich-postgres |
immich-postgres | pg_ctl -D /var/lib/postgresql/data -l logfile start
immich-postgres |
immich-postgres | initdb: warning: enabling "trust" authentication for local connections
immich-postgres | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
immich-postgres | 2026-09-30 17:18:53.381 GMT [48] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:53.382 GMT [48] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | waiting for server to start....2026-09-30 17:18:53.429 GMT [53] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:53.430 GMT [53] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 19:18:53.479 CEST [53] LOG: starting PostgreSQL 16.10 (Debian 16.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
immich-postgres | 2026-09-30 19:18:53.486 CEST [53] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
immich-postgres | 2026-09-30 19:18:53.506 CEST [56] LOG: database system was shut down at 2026-09-30 19:18:53 CEST
immich-postgres | 2026-09-30 19:18:53.519 CEST [53] LOG: database system is ready to accept connections
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-postgres | done
immich-postgres | server started
immich-postgres | CREATE DATABASE
immich-postgres |
immich-postgres |
immich-postgres | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
immich-postgres |
immich-postgres | waiting for server to shut down...2026-09-30 19:18:53.959 CEST [53] LOG: received fast shutdown request
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:30:35 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:30:35 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:35 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:35 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:30:35 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-postgres | .2026-09-30 19:18:53.964 CEST [53] LOG: aborting any active transactions
immich-postgres | 2026-09-30 19:18:53.970 CEST [53] LOG: background worker "logical replication launcher" (PID 62) exited with exit code 1
immich-postgres | 2026-09-30 19:18:53.971 CEST [54] LOG: shutting down
immich-postgres | 2026-09-30 19:18:53.974 CEST [54] LOG: checkpoint starting: shutdown immediate
immich-postgres | 2026-09-30 19:18:54.069 CEST [54] LOG: checkpoint complete: wrote 922 buffers (1.4%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.035 s, sync=0.048 s, total=0.098 s; sync files=301, longest=0.017 s, average=0.001 s; distance=1672 kB, estimate=1672 kB; lsn=0/18CED10, redo lsn=0/18CED10
immich-postgres | 2026-09-30 19:18:54.092 CEST [53] LOG: database system is shut down
immich-postgres | done
immich-postgres | server stopped
immich-postgres |
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-postgres | PostgreSQL init process complete; ready for start up.
immich-postgres |
immich-postgres | 2026-09-30 17:18:54.182 GMT [1] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:54.182 GMT [1] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: starting PostgreSQL 16.10 (Debian 16.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: listening on IPv6 address "::", port 5432
immich-postgres | 2026-09-30 19:18:54.232 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
immich-postgres | 2026-09-30 19:18:54.244 CEST [72] LOG: database system was shut down at 2026-09-30 19:18:54 CEST
immich-postgres | 2026-09-30 19:18:54.259 CEST [1] LOG: database system is ready to accept connections
immich-postgres | 2026-09-30 19:19:07.602 CEST [95] ERROR: relation "system_metadata" does not exist at character 21
immich-postgres | 2026-09-30 19:19:07.602 CEST [95] STATEMENT: select "value" from "system_metadata" where "key" = $1
immich-postgres | 2026-09-30 19:23:54.345 CEST [70] LOG: checkpoint starting: time
immich-postgres | 2026-09-30 19:28:24.197 CEST [70] LOG: checkpoint complete: wrote 16951 buffers (25.9%); 0 WAL file(s) added, 0 removed, 16 recycled; write=269.713 s, sync=0.077 s, total=269.853 s; sync files=769, longest=0.007 s, average=0.001 s; distance=269095 kB, estimate=269095 kB; lsn=0/11F98B70, redo lsn=0/11F98B38
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:30:43 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:30:43 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:43 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:43 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:30:43 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:30:51 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:30:51 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:51 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:30:51 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:30:51 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:31:00 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:31:00 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:00 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:00 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:31:00 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:31:09 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:31:10 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:10 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:10 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:31:10 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:31:20 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:31:21 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:21 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:21 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:31:21 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:31:35 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:31:35 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:35 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:35 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:31:35 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:31:56 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:31:56 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:56 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:31:56 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:31:56 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
immich-server | Initializing Immich v3.0.3
immich-server | Detected CPU Cores: 8
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:32:29 PM  ERROR [Microservices:DatabaseRepository] Migrations failed: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker error: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing, stack: Error: corrupted migrations: previously executed migration 1784647658615-AddOAuthBearerTokenToSession is missing
immich-server | at #ensureNoMissingMigrations (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:495:23)
immich-server | at #getState (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:447:40)
immich-server | at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
immich-server | at async run (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:417:31)
immich-server | at async /usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/kysely.js:578:32
immich-server | at async DefaultConnectionProvider.provideConnection (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/driver/default-connection-provider.js:12:20)
immich-server | at async #migrate (/usr/src/app/server/node_modules/.pnpm/kysely@0.28.17/node_modules/kysely/dist/cjs/migration/migrator.js:273:20)
immich-server | at async DatabaseRepository.runMigrations (/usr/src/app/server/dist/repositories/database.repository.js:324:36)
immich-server | at async /usr/src/app/server/dist/services/database.service.js:103:17
immich-server | at async /usr/src/app/server/dist/repositories/database.repository.js:376:27
immich-server | microservices worker exited with code 1
immich-server | Killing api process
@@ -0,0 +1,8 @@
{
"immich-postgres": {
"image": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"probe": "datadir major version",
"answer": "16",
"probe_rc": 0
}
}
@@ -0,0 +1,11 @@
{
"/srv/felhom-gate/hdd/appdata/immich": {
"profile/.immich": "13:0bacc6528e07d8cb",
"upload/.immich": "13:a68db79a3fbe6725",
"encoded-video/.immich": "13:2cb994a10bfe243c",
"backups/.immich": "13:648fe4b9664fadff",
"thumbs/.immich": "13:0bacc6528e07d8cb",
"library/.immich": "13:a68db79a3fbe6725"
},
"/srv/felhom-gate/hdd/userdata/media/photos": {}
}
@@ -0,0 +1,4 @@
{
"/srv/felhom-gate/hdd/appdata/immich": "f58de940144f864942da1433dce3d28400dec9e5a1839f6f49adcacdb2a88b72",
"/srv/felhom-gate/hdd/userdata/media/photos": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,11 @@
{
"/srv/felhom-gate/hdd/appdata/immich": {
"profile/.immich": "13:7cb1f8a19d944d7e",
"upload/.immich": "13:67848ba791bd7ef6",
"encoded-video/.immich": "13:68bdf71e87fabadc",
"backups/.immich": "13:7cb1f8a19d944d7e",
"thumbs/.immich": "13:7cb1f8a19d944d7e",
"library/.immich": "13:67848ba791bd7ef6"
},
"/srv/felhom-gate/hdd/userdata/media/photos": {}
}
@@ -0,0 +1,4 @@
{
"/srv/felhom-gate/hdd/appdata/immich": "b43c15cc1fae7c10a39b2da086f7455752877aef2cd96c75934782bb6fb03552",
"/srv/felhom-gate/hdd/userdata/media/photos": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,6 @@
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784647658615-AddOAuthBearerTokenToSession" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784836013770-MinFacePreferenceMigration" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784986754473-ConvertUserPasswordEmptyStringToNull" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784986754474-AlbumDescriptionNullable" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1786385711807-AlbumOwnerDeleteTrigger" succeeded
@@ -0,0 +1,60 @@
[17:17:59] scratch drive folders cleared before FROM (R-656): none existed
[17:17:59] D-immich-0b82-768: deploying immich at FROM {'immich-server': 'ghcr.io/immich-app/immich-server:v3.0.3', 'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.0.3', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine'}
[17:19:34] FROM settled=True in 31.4s :: {"immich-machine-learning": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:19:34] fixture: the BOX walk's own (Immich), through upgrade_boxport
[17:19:34] immich: seeded album drillalbumcb179b80
[17:19:35] immich: readback found=True (http 200, control passed)
[17:19:35] C1 (seed reads back BEFORE): True
[17:19:35] D-immich-0b82-768: swapping to TO {'immich-server': 'ghcr.io/immich-app/immich-server:v3.2.2', 'immich-machine-learning': 'ghcr.io/immich-app/immich-machine-learning:v3.0.3', 'immich-postgres': 'ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0', 'immich-redis': 'redis:7-alpine'}
[17:19:36] TO up -d rc=0
[17:20:08] TO settled=True in 31.5s :: {"immich-machine-learning": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-postgres": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-redis": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}, "immich-server": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[17:20:08] engine state immich-postgres: 16
[17:20:08] migration lines observed: 6
[17:20:08] immich: readback found=True (http 200, control passed)
[17:20:08] RESULT (seed reads back AFTER): True
[17:20:09] files_may_change — the files: ['/srv/felhom-gate/hdd/appdata/immich/backups/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/encoded-video/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/library/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/profile/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/thumbs/.immich (changed)', '/srv/felhom-gate/hdd/appdata/immich/upload/.immich (changed)']
[17:20:09] files_may_change: the bind-mounted tree changed under ['/srv/felhom-gate/hdd/appdata/immich']
[17:20:09] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:2283
[17:20:24] + 15s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=723M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1460M/2048M peak=1631M kills=0 rs=0 reqs=304
[17:20:39] + 30s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=707M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1471M/2048M peak=1631M kills=0 rs=0 reqs=604
[17:20:55] + 46s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=703M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1467M/2048M peak=1631M kills=0 rs=0 reqs=904
[17:21:10] + 61s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1494M/2048M peak=1631M kills=0 rs=0 reqs=1204
[17:21:25] + 76s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1494M/2048M peak=1631M kills=0 rs=0 reqs=1507
[17:21:40] + 91s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1357M/2048M peak=1631M kills=0 rs=0 reqs=1808
[17:21:55] + 106s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=701M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1111M/2048M peak=1631M kills=0 rs=0 reqs=2108
[17:22:11] + 122s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1113M/2048M peak=1631M kills=0 rs=0 reqs=2408
[17:22:26] + 137s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1116M/2048M peak=1631M kills=0 rs=0 reqs=2708
[17:22:41] + 152s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1083M/2048M peak=1631M kills=0 rs=0 reqs=3008
[17:22:56] + 167s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1083M/2048M peak=1631M kills=0 rs=0 reqs=3308
[17:23:11] + 182s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1084M/2048M peak=1631M kills=0 rs=0 reqs=3608
[17:23:26] + 197s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1075M/2048M peak=1631M kills=0 rs=0 reqs=3912
[17:23:42] + 213s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=702M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1074M/2048M peak=1631M kills=0 rs=0 reqs=4212
[17:23:57] + 228s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=705M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1071M/2048M peak=1631M kills=0 rs=0 reqs=4512
[17:24:12] + 243s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=715M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1068M/2048M peak=1631M kills=0 rs=0 reqs=4812
[17:24:27] + 258s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=731M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1074M/2048M peak=1631M kills=0 rs=0 reqs=5112
[17:24:42] + 273s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=741M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1078M/2048M peak=1631M kills=0 rs=0 reqs=5412
[17:24:58] + 288s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=748M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1074M/2048M peak=1631M kills=0 rs=0 reqs=5712
[17:25:13] + 304s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=754M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1072M/2048M peak=1631M kills=0 rs=0 reqs=6016
[17:25:28] + 319s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=754M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1073M/2048M peak=1631M kills=0 rs=0 reqs=6316
[17:25:43] + 334s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=764M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1075M/2048M peak=1631M kills=0 rs=0 reqs=6616
[17:25:58] + 349s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=767M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1072M/2048M peak=1631M kills=0 rs=0 reqs=6916
[17:26:14] + 364s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=763M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1072M/2048M peak=1631M kills=0 rs=0 reqs=7216
[17:26:29] + 380s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=767M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1075M/2048M peak=1631M kills=0 rs=0 reqs=7516
[17:26:44] + 395s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=763M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1076M/2048M peak=1631M kills=0 rs=0 reqs=7820
[17:26:59] + 410s immich-machine-learning=249M/1536M peak=265M kills=0 rs=0 immich-postgres=763M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1077M/2048M peak=1631M kills=0 rs=0 reqs=8120
[17:27:14] + 425s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1078M/2048M peak=1631M kills=0 rs=0 reqs=8420
[17:27:29] + 440s immich-machine-learning=249M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1079M/2048M peak=1631M kills=0 rs=0 reqs=8720
[17:27:45] + 456s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1079M/2048M peak=1631M kills=0 rs=0 reqs=9020
[17:28:00] + 471s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1081M/2048M peak=1631M kills=0 rs=0 reqs=9324
[17:28:15] + 486s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1080M/2048M peak=1631M kills=0 rs=0 reqs=9624
[17:28:30] + 501s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1081M/2048M peak=1631M kills=0 rs=0 reqs=9924
[17:28:45] + 516s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1081M/2048M peak=1631M kills=0 rs=0 reqs=10224
[17:29:01] + 532s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=10524
[17:29:16] + 547s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=10824
[17:29:31] + 562s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=11124
[17:29:46] + 577s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=762M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=11426
[17:30:01] + 592s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=761M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1083M/2048M peak=1631M kills=0 rs=0 reqs=11728
[17:30:17] + 607s immich-machine-learning=248M/1536M peak=265M kills=0 rs=0 immich-postgres=761M/768M peak=768M kills=0 rs=0 immich-redis=13M/128M peak=17M kills=0 rs=0 immich-server=1082M/2048M peak=1631M kills=0 rs=0 reqs=12028
[17:30:17] memory watch: killed=False tight=[] requests=12028 codes={'200': 12028}
[17:30:17] D-immich-0b82-768: ABORT — putting the FROM images back
[17:33:20] ABORT: the app did NOT come back (rc=0, 181.6s)
@@ -0,0 +1,566 @@
immich-redis | 1:C 30 Sep 2026 19:18:52.334 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
immich-machine-learning | [09/30/26 19:18:54] INFO  Starting gunicorn 25.3.0
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * Redis version=7.4.11, bits=64, commit=00000000, modified=0, pid=1, just started
immich-machine-learning | [09/30/26 19:18:54] INFO  Listening at: http://[::]:3003 (13)
immich-machine-learning | [09/30/26 19:18:54] INFO  Using worker: immich_ml.config.CustomUvicornWorker
immich-machine-learning | [09/30/26 19:18:54] INFO  Booting worker with pid: 19
immich-machine-learning | [09/30/26 19:18:57] INFO  Started server process [19]
immich-machine-learning | [09/30/26 19:18:57] INFO  Waiting for application startup.
immich-machine-learning | [09/30/26 19:18:57] INFO  Created in-memory cache with unloading after 300s
immich-machine-learning |   of inactivity.
immich-machine-learning | [09/30/26 19:18:57] INFO  Initialized request thread pool with 8 threads.
immich-machine-learning | [09/30/26 19:18:57] INFO  Application startup complete.
immich-redis | 1:C 30 Sep 2026 19:18:52.334 * Configuration loaded
immich-postgres | Using SSD storage
immich-server | Initializing Immich v3.2.2
immich-redis | 1:M 30 Sep 2026 19:18:52.335 * monotonic clock: POSIX clock_gettime
immich-server | Detected CPU Cores: 8
immich-redis | 1:M 30 Sep 2026 19:18:52.337 * Running mode=standalone, port=6379.
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-redis | 1:M 30 Sep 2026 19:18:52.337 * Server initialized
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-redis | 1:M 30 Sep 2026 19:18:52.341 * Creating AOF base file appendonly.aof.1.base.rdb on server start
immich-postgres | The files belonging to this database system will be owned by user "postgres".
immich-redis | 1:M 30 Sep 2026 19:18:52.348 * Creating AOF incr file appendonly.aof.1.incr.aof on server start
immich-postgres | This user must also own the server process.
immich-postgres |
immich-postgres | The database cluster will be initialized with locale "en_US.utf8".
immich-postgres | The default database encoding has accordingly been set to "UTF8".
immich-postgres | The default text search configuration will be set to "english".
immich-postgres |
immich-postgres | Data page checksums are enabled.
immich-postgres |
immich-postgres | fixing permissions on existing directory /var/lib/postgresql/data ... ok
immich-postgres | creating subdirectories ... ok
immich-postgres | selecting dynamic shared memory implementation ... posix
immich-postgres | selecting default max_connections ... 100
immich-redis | 1:M 30 Sep 2026 19:18:52.348 * Ready to accept connections tcp
immich-server | Starting api worker
immich-server | Starting microservices worker
immich-server | (node:7) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-postgres | selecting default shared_buffers ... 128MB
immich-postgres | selecting default time zone ... Europe/Budapest
immich-postgres | creating configuration files ... ok
immich-server | (node:29) ExperimentalWarning: WASI is an experimental feature and might change at any time
immich-server | (Use `node --trace-warnings ...` to show where the warning was created)
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784647658615-AddOAuthBearerTokenToSession" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784836013770-MinFacePreferenceMigration" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784986754473-ConvertUserPasswordEmptyStringToNull" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1784986754474-AlbumDescriptionNullable" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1786385711807-AlbumOwnerDeleteTrigger" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1786741078327-AddWorkflowLogsTable" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1786972746371-AssetOcrUpdatedAtTrigger" succeeded
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1786972746372-AssetOcrSyncReset" succeeded
immich-postgres | running bootstrap script ... ok
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1787148183729-ClusterGroups" succeeded
immich-postgres | performing post-bootstrap initialization ... ok
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Migration "1787148183730-DeleteMismatchedMemoryAssets" succeeded
immich-postgres | syncing data to disk ... ok
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseRepository] Finished running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:19:45 PM  LOG [Microservices:DatabaseService] Checking for schema drift
immich-server | [Nest] 7 - 09/30/2026, 7:19:46 PM  LOG [Microservices:DatabaseService] No schema drift detected
immich-server | [Nest] 29 - 09/30/2026, 7:19:46 PM  LOG [Api:WebsocketRepository] Initialized websocket server
immich-server | [Nest] 7 - 09/30/2026, 7:19:47 PM  LOG [Microservices:StorageService] Verifying system mount folder checks, current state: {"mountChecks":{"thumbs":true,"upload":true,"backups":true,"library":true,"profile":true,"encoded-video":true}}
immich-server | [Nest] 7 - 09/30/2026, 7:19:47 PM  LOG [Microservices:StorageService] Successfully verified system mount folder checks
immich-server | [Nest] 7 - 09/30/2026, 7:19:47 PM  LOG [Microservices:MetadataService] Bootstrapping metadata service
immich-server | [Nest] 7 - 09/30/2026, 7:19:47 PM  LOG [Microservices:MetadataService] Initializing metadata service
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:DatabaseRepository] targetLists=1, current=1 for clip_index of 0 rows
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:DatabaseRepository] targetLists=1, current=1 for face_index of 0 rows
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:DatabaseRepository] Running migrations
immich-server | [Nest] 7 - 09/30/2026, 7:19:47 PM  LOG [Microservices:MapRepository] Initializing metadata repository
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:DatabaseRepository] Finished running migrations
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:DatabaseService] Checking for schema drift
immich-postgres |
immich-postgres |
immich-postgres | Success. You can now start the database server using:
immich-postgres |
immich-postgres | pg_ctl -D /var/lib/postgresql/data -l logfile start
immich-postgres |
immich-postgres | initdb: warning: enabling "trust" authentication for local connections
immich-postgres | initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
immich-postgres | 2026-09-30 17:18:53.381 GMT [48] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:53.382 GMT [48] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | waiting for server to start....2026-09-30 17:18:53.429 GMT [53] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 17:18:53.430 GMT [53] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-postgres | 2026-09-30 19:18:53.479 CEST [53] LOG: starting PostgreSQL 16.10 (Debian 16.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
immich-postgres | 2026-09-30 19:18:53.486 CEST [53] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
immich-postgres | 2026-09-30 19:18:53.506 CEST [56] LOG: database system was shut down at 2026-09-30 19:18:53 CEST
immich-postgres | 2026-09-30 19:18:53.519 CEST [53] LOG: database system is ready to accept connections
immich-postgres | done
immich-postgres | server started
immich-postgres | CREATE DATABASE
immich-postgres |
immich-postgres |
immich-postgres | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
immich-postgres |
immich-postgres | waiting for server to shut down...2026-09-30 19:18:53.959 CEST [53] LOG: received fast shutdown request
immich-postgres | .2026-09-30 19:18:53.964 CEST [53] LOG: aborting any active transactions
immich-postgres | 2026-09-30 19:18:53.970 CEST [53] LOG: background worker "logical replication launcher" (PID 62) exited with exit code 1
immich-postgres | 2026-09-30 19:18:53.971 CEST [54] LOG: shutting down
immich-postgres | 2026-09-30 19:18:53.974 CEST [54] LOG: checkpoint starting: shutdown immediate
immich-postgres | 2026-09-30 19:18:54.069 CEST [54] LOG: checkpoint complete: wrote 922 buffers (1.4%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.035 s, sync=0.048 s, total=0.098 s; sync files=301, longest=0.017 s, average=0.001 s; distance=1672 kB, estimate=1672 kB; lsn=0/18CED10, redo lsn=0/18CED10
immich-postgres | 2026-09-30 19:18:54.092 CEST [53] LOG: database system is shut down
immich-postgres | done
immich-postgres | server stopped
immich-postgres |
immich-postgres | PostgreSQL init process complete; ready for start up.
immich-postgres |
immich-postgres | 2026-09-30 17:18:54.182 GMT [1] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:DatabaseService] No schema drift detected
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:StorageService] Verifying system mount folder checks, current state: {"mountChecks":{"thumbs":true,"upload":true,"backups":true,"library":true,"profile":true,"encoded-video":true}}
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:StorageService] Successfully verified system mount folder checks
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:ServerService] Feature Flags: {
immich-server | "smartSearch": true,
immich-server | "facialRecognition": true,
immich-server | "duplicateDetection": true,
immich-server | "map": true,
immich-server | "reverseGeocoding": true,
immich-server | "importFaces": false,
immich-server | "sidecar": true,
immich-server | "search": true,
immich-server | "trash": true,
immich-server | "oauth": false,
immich-server | "oauthAutoLaunch": false,
immich-server | "ocr": true,
immich-server | "passwordLogin": true,
immich-server | "configFile": false,
immich-server | "email": false,
immich-server | "realtimeTranscoding": false
immich-server | }
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:SystemConfigService] LogLevel=log (set via system config)
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:NestFactory] Starting Nest application...
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] BullModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] ClsModule dependencies initialized
immich-postgres | 2026-09-30 17:18:54.182 GMT [1] LOG: skipping missing configuration file "/var/lib/postgresql/data/postgresql.override.conf"
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] ClsCommonModule dependencies initialized
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: starting PostgreSQL 16.10 (Debian 16.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
immich-postgres | 2026-09-30 19:18:54.225 CEST [1] LOG: listening on IPv6 address "::", port 5432
immich-postgres | 2026-09-30 19:18:54.232 CEST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
immich-postgres | 2026-09-30 19:18:54.244 CEST [72] LOG: database system was shut down at 2026-09-30 19:18:54 CEST
immich-postgres | 2026-09-30 19:18:54.259 CEST [1] LOG: database system is ready to accept connections
immich-postgres | 2026-09-30 19:19:07.602 CEST [95] ERROR: relation "system_metadata" does not exist at character 21
immich-postgres | 2026-09-30 19:19:07.602 CEST [95] STATEMENT: select "value" from "system_metadata" where "key" = $1
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] OpenTelemetryModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] KyselyModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] OpenTelemetryCoreModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] DiscoveryModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] ClsRootModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] ClsPluginsModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] ScheduleModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] BullModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] BullModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:InstanceLoader] ApiModule dependencies initialized
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  WARN [Api:LegacyRouteConverter] Unsupported route path: "/api/*". In previous versions, the symbols ?, *, and + were used to denote optional or repeating path parameters. The latest version of "path-to-regexp" now requires the use of named parameters. For example, instead of using a route like /users/* to capture all routes starting with "/users", you should use /users/*path. For more details, refer to the migration guide. Attempting to auto-convert to "/api/{*path}"...
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ApiKeyController {/api/api-keys}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys/me, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys/:id/rotate, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/api-keys/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ActivityController {/api/activities}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/activities, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/activities, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/activities/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/activities/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AlbumController {/api/albums}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id/map-markers, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id/assets, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id/users, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id/user/:userId, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/albums/:id/user/:userId, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AppController {/api}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/.well-known/immich, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/custom.css, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AssetController {/api/assets}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/jobs, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/copy, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/metadata, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/metadata, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/metadata, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/ocr, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/metadata, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/metadata/:key, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/metadata/:key, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/edits, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/edits, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/edits, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AssetFilesController {/api/asset-files}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/asset-files, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/asset-files/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/asset-files/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/asset-files/:id/download, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AssetMediaController {/api/assets}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/original, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/thumbnail, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/video/playback, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/bulk-upload-check, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AuthController {/api/auth}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/login, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/admin-sign-up, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/validateToken, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/change-password, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/logout, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/status, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/pin-code, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/pin-code, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/pin-code, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/session/unlock, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/auth/session/lock, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] AuthAdminController {/api/admin/auth}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/auth/unlink-all, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ClusterGroupController {/api/cluster-groups}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/requests, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/requests/:id/accept, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/requests/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/:id/requests, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/:id/users, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/:id/requests, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/:id/regenerate-people, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/cluster-groups/:id/leave, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ConfigUserController {/api/config}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/config, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/config/defaults, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ConfigAdminController {/api/admin/config}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/config, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/config/defaults, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/config, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ConfigPublicController {/api/public/config}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/public/config, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/public/config/defaults, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] DatabaseBackupController {/api/admin/database-backups}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/database-backups, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/database-backups/:filename, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/database-backups, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/database-backups/start-restore, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/database-backups/upload, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] DownloadController {/api/download}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/download/info, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/download/archive, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] DuplicateController {/api/duplicates}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/duplicates, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/duplicates, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/duplicates/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/duplicates/resolve, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] FaceController {/api/faces}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/faces, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/faces, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/faces/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/faces/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] IntegrityAdminController {/api/admin/integrity}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/integrity/summary, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/integrity/report, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/integrity/report/:id/file, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/integrity/report/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/integrity/report/:type/csv, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] JobController {/api/jobs}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/jobs, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/jobs, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/jobs/:name, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] LibraryController {/api/libraries}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id/validate, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/libraries/:id/scan, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] MaintenanceController {/api/admin/maintenance}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/maintenance/status, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/maintenance/detect-install, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/maintenance/login, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/maintenance, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] MapController {/api/map}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/map/markers, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/map/reverse-geocode, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] MemoryController {/api/memories}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/:id/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/memories/:id/assets, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] NotificationController {/api/notifications}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/notifications, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/notifications, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/notifications, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/notifications/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/notifications/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/notifications/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] NotificationAdminController {/api/admin/notifications}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/notifications, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/notifications/test-email, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/notifications/templates/:name, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] OAuthController {/api/oauth}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/oauth/mobile-redirect, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/oauth/authorize, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/oauth/callback, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/oauth/link, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/oauth/unlink, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/oauth/backchannel-logout, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] PartnerController {/api/partners}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/partners, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/partners, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/partners/:id, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/partners/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/partners/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] PersonController {/api/people}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id/thumbnail, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id/reassign, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/merge, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/people/:id/merge, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] PluginController {/api/plugins}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/plugins, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/plugins/methods, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/plugins/templates, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/plugins/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] QueueController {/api/queues}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/queues, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/queues/:name, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/queues/:name, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/queues/:name/jobs, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/queues/:name/jobs, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] SearchController {/api/search}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/metadata, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/statistics, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/random, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/large-assets, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/smart, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/explore, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/person, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/places, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/cities, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/search/suggestions, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ServerController {/api/server}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/about, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/apk-links, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/storage, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/ping, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/version, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/version-history, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/features, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/config, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/media-types, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/license, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/license, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/license, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/server/version-check, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] SessionController {/api/sessions}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sessions/:id/lock, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] SharedLinkController {/api/shared-links}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/login, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/me, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/shared-links/:id/assets, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] StackController {/api/stacks}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/stacks/:id/assets/:assetId, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] SyncController {/api/sync}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sync/stream, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sync/ack, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sync/ack, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/sync/ack, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] SystemConfigController {/api/system-config}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-config, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-config/defaults, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-config, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-config/storage-template-options, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] SystemMetadataController {/api/system-metadata}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-metadata/admin-onboarding, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-metadata/admin-onboarding, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-metadata/reverse-geocoding-state, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/system-metadata/version-check-state, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] TagController {/api/tags}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/:id/assets, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/tags/:id/assets, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] TimelineController {/api/timeline}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/timeline/buckets, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/timeline/bucket, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] TrashController {/api/trash}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/trash/empty, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/trash/restore, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/trash/restore/assets, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] UserAdminController {/api/admin/users}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/calendar-heatmap, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/sessions, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/statistics, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/preferences, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/preferences, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/preferences, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/admin/users/:id/restore, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] UserController {/api/users}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/calendar-heatmap, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/preferences, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/preferences, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/preferences, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/license, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/license, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/license, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/onboarding, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/onboarding, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/me/onboarding, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/profile-image, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/profile-image, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/users/:id/profile-image, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] VideoStreamController {/api/assets}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/video/stream/main.m3u8, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/video/stream/:sessionId/:variantIndex/playlist.m3u8, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/video/stream/:sessionId/:variantIndex/:filename, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/assets/:id/video/stream/:sessionId, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] ViewController {/api/view}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/view/folder/unique-paths, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/view/folder, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RoutesResolver] WorkflowController {/api/workflows}:
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows, POST} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/triggers, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/:id, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/:id/share, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/:id, PUT} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/:id, PATCH} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/:id, DELETE} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:RouterExplorer] Mapped {/api/workflows/:id/logs, GET} route
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:NestApplication] Nest application successfully started
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:Bootstrap] Immich Server is listening on http://[::1]:2283 [v3.2.2] [production] 
immich-server | [Nest] 29 - 09/30/2026, 7:19:47 PM  LOG [Api:MachineLearningRepository] Machine learning server became healthy (http://immich-machine-learning:3003).
immich-server | [Nest] 7 - 09/30/2026, 7:19:47 PM  LOG [Microservices:MapRepository] Starting geodata import
immich-server | [Nest] 7 - 09/30/2026, 7:19:50 PM  LOG [Microservices:MapRepository] 10000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:50 PM  LOG [Microservices:MapRepository] 20000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:50 PM  LOG [Microservices:MapRepository] 30000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:50 PM  LOG [Microservices:MapRepository] 40000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:51 PM  LOG [Microservices:MapRepository] 50000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:52 PM  LOG [Microservices:MapRepository] 60000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:52 PM  LOG [Microservices:MapRepository] 70000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:52 PM  LOG [Microservices:MapRepository] 80000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:52 PM  LOG [Microservices:MapRepository] 90000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:53 PM  LOG [Microservices:MapRepository] 100000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:53 PM  LOG [Microservices:MapRepository] 110000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:53 PM  LOG [Microservices:MapRepository] 120000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:53 PM  LOG [Microservices:MapRepository] 130000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:54 PM  LOG [Microservices:MapRepository] 140000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:54 PM  LOG [Microservices:MapRepository] 150000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:54 PM  LOG [Microservices:MapRepository] 160000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:54 PM  LOG [Microservices:MapRepository] 170000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:55 PM  LOG [Microservices:MapRepository] 180000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:56 PM  LOG [Microservices:MapRepository] 190000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:56 PM  LOG [Microservices:MapRepository] 200000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:56 PM  LOG [Microservices:MapRepository] 210000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:56 PM  LOG [Microservices:MapRepository] 220000 geodata records imported
immich-server | [Nest] 7 - 09/30/2026, 7:19:56 PM  LOG [Microservices:MapRepository] Successfully imported 228294 geodata records in 8.82s (25879 records/second)
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:MapRepository] Geodata import completed
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:MetadataService] Initialized local reverse geocoder
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:ServerService] Feature Flags: {
immich-server | "smartSearch": true,
immich-server | "facialRecognition": true,
immich-server | "duplicateDetection": true,
immich-server | "map": true,
immich-server | "reverseGeocoding": true,
immich-server | "importFaces": false,
immich-server | "sidecar": true,
immich-server | "search": true,
immich-server | "trash": true,
immich-server | "oauth": false,
immich-server | "oauthAutoLaunch": false,
immich-server | "ocr": true,
immich-server | "passwordLogin": true,
immich-server | "configFile": false,
immich-server | "email": false,
immich-server | "realtimeTranscoding": false
immich-server | }
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:VersionService] Adding 3.2.2 to upgrade history
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:SystemConfigService] LogLevel=log (set via system config)
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:MachineLearningRepository] Machine learning server became healthy (http://immich-machine-learning:3003).
immich-server | [Nest] 7 - 09/30/2026, 7:20:04 PM  LOG [Microservices:WorkflowExecutionService] Upgraded plugin immich-plugin-core (14 methods) from 2.0.1 to 2.0.1 
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:WorkflowExecutionService] Loaded plugin: immich-plugin-core@2.0.1
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:WorkflowExecutionService] Loaded plugin with host functions: immich-plugin-core@2.0.1/worker
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:NestFactory] Starting Nest application...
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] BullModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] ClsModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] ClsCommonModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] OpenTelemetryModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] KyselyModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] OpenTelemetryCoreModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] DiscoveryModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] ClsRootModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] ClsPluginsModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] BullModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] BullModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:InstanceLoader] MicroservicesModule dependencies initialized
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:NestApplication] Nest application successfully started
immich-server | [Nest] 7 - 09/30/2026, 7:20:05 PM  LOG [Microservices:Bootstrap] Immich Microservices is running [v3.2.2] [production] 
@@ -0,0 +1,26 @@
{
"immich-machine-learning": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
},
"immich-postgres": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
},
"immich-redis": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
},
"immich-server": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,109 @@
{
"harness_version": 4,
"edge": "D-immich-0b82-768",
"app": "immich",
"note": "Part D 2026-09-30: step 0b8272068aab36bf's own definition, immich-postgres 512M -> 768M (R-732)",
"from": {
"immich-server": "ghcr.io/immich-app/immich-server:v3.0.3",
"immich-machine-learning": "ghcr.io/immich-app/immich-machine-learning:v3.0.3",
"immich-postgres": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"immich-redis": "redis:7-alpine"
},
"to": {
"immich-server": "ghcr.io/immich-app/immich-server:v3.2.2",
"immich-machine-learning": "ghcr.io/immich-app/immich-machine-learning:v3.0.3",
"immich-postgres": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"immich-redis": "redis:7-alpine"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kimmich-server | \u001b[32m[Nest] 7 - \u001b[39m09/30/2026, 7:19:45 PM \u001b[32m LOG\u001b[39m \u001b[33m[Microservices:DatabaseRepository]\u001b[39m \u001b[32mRunning migrations\u001b[39m",
"abort": "refuses",
"abort_detail": "18:54.244 CEST [72] LOG: database system was shut down at 2026-09-30 19:18:54 CEST\n\u001b[2Kimmich-postgres | 2026-09-30 19:18:54.259 CEST [1] LOG: database system is ready to accept connections\n\u001b[2Kimmich-postgres | 2026-09-30 19:19:07.602 CEST [95] ERROR: relation \"system_metadata\" does not exist at character 21\n\u001b[2Kimmich-postgres | 2026-09-30 19:19:07.602 CEST [95] STATEMENT: select \"value\" from \"system_metadata\" where \"key\" = $1\n\u001b[2Kimmich-postgres | 2026-09-30 19:23:54.345 CEST [70] LOG: checkpoint starting: time\n\u001b[2Kimmich-postgres | 2026-09-30 19:28:24.197 CEST [70] LOG: checkpoint complete: wrote 16951 buffers (25.9%); 0 WAL file(s) added, 0 removed, 16 recycled; write=269.713 s, sync=0.077 s, total=269.853 s; sync files=769, longest=0.007 s, average=0.001 s; distance=269095 kB, estimate=269095 kB; lsn=0/11F98B70, redo lsn=0/11F98B38",
"engine_state_after": {
"immich-postgres": {
"image": "ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0",
"probe": "datadir major version",
"answer": "16",
"probe_rc": 0
}
},
"memory": {
"soak_s": 607.7,
"requested_s": 600,
"requests": 12028,
"codes": {
"200": 12028
},
"first_kill": null,
"containers": {
"immich-machine-learning": {
"limit": 1610612736,
"peak": 278474752,
"peak_pct": 0.173,
"anon_peak_sampled": 246366208,
"anon_peak_pct": 0.153,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
},
"immich-postgres": {
"limit": 805306368,
"peak": 805638144,
"peak_pct": 1.0,
"anon_peak_sampled": 238280704,
"anon_peak_pct": 0.296,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
},
"immich-redis": {
"limit": 134217728,
"peak": 18083840,
"peak_pct": 0.135,
"anon_peak_sampled": 4100096,
"anon_peak_pct": 0.031,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
},
"immich-server": {
"limit": 2147483648,
"peak": 1711157248,
"peak_pct": 0.797,
"anon_peak_sampled": 1054654464,
"anon_peak_pct": 0.491,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [
"files_may_change"
],
"duration_s": 31.5,
"measured_at": "2026-09-30T17:33:20Z",
"evidence": "evidence/D-immich-0b82-768",
"scratch_cleared": [],
"files_changed": [
"/srv/felhom-gate/hdd/appdata/immich"
],
"files_changed_detail": [
"/srv/felhom-gate/hdd/appdata/immich/backups/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/encoded-video/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/library/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/profile/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/thumbs/.immich (changed)",
"/srv/felhom-gate/hdd/appdata/immich/upload/.immich (changed)"
],
"total_s": 921.3
}
@@ -0,0 +1,144 @@
# =============================================================================
# .felhom.yml — App metadata for felhom-controller
# =============================================================================
# Place alongside docker-compose.yml in each stack directory:
# /opt/docker/stacks/immich/.felhom.yml
# =============================================================================
# --- Display info (shown on dashboard) ---
display_name: "Immich"
description: "Fotók és videók kezelése (Google Photos alternatíva)"
category: "media"
subdomain: "photos"
# --- Asset slug ---
slug: "immich"
# catalog_since: the date THIS repo last changed this app's pinned images. Any commit that
# changes an image: line must set this to the same day (see CLAUDE.md).
catalog_since: "2026-09-22"
# --- Resource hints (displayed on deploy screen) ---
resources:
mem_request: "2048M"
mem_limit: "4480M"
pi_compatible: false
needs_hdd: true
# --- Backup classification (referential coupling; see felhom.eu documentation/audits/SPIKE-backup-classification-2026-07-14.md) ---
backup:
hdd:
- path: appdata/immich
class: mandatory # managed upload library — DB-referenced (SQ3: restore-without = broken)
userdata:
- path: media/photos
class: optional # external library, :ro — precious but re-scanned (explicit overrides ro-default)
# --- Deploy fields ---
deploy_fields:
- env_var: DOMAIN
label: "Domain"
type: domain
description: "A szerver domain neve"
locked_after_deploy: true
- env_var: SUBDOMAIN
label: "Aldomain"
type: subdomain
default: "photos"
required: true
locked_after_deploy: true
description: "Az alkalmazás aldomainje"
- env_var: DB_PASSWORD
label: "Adatbázis jelszó"
type: secret
generate: "password:24"
locked_after_deploy: true
- env_var: HDD_PATH
label: "Adattárolási útvonal"
type: path
required: true
placeholder: "/mnt/felhom-drives/hdd_1"
description: "A külső merevlemez elérési útja, ahol a fotók és videók tárolódnak"
locked_after_deploy: true
# --- App info (info page content) ---
app_info:
tagline: 'Google Photos alternatíva - automatikus fotó mentés és rendszerezés'
docs_url: 'https://immich.app/docs/overview/introduction'
use_cases:
- 'Fotók és videók automatikus mentése telefonról'
- 'Arc- és tárgyfelismerés gépi tanulással'
- 'Térképes megjelenítés helyszín alapján'
- 'Emlékek és visszatekintések automatikus generálása'
- 'Albumok létrehozása és megosztása családtagokkal'
first_steps:
- 'Nyisd meg a photos.DOMAIN címet a böngészőben'
- 'Hozd létre az admin fiókot'
- 'Telepítsd az Immich alkalmazást a telefonodra (Android/iOS)'
- 'Állítsd be az automatikus feltöltést az alkalmazásban'
- 'Hívd meg a családtagokat külön fiókokkal'
# MOUNT-READY, REGISTRATION PENDING: a megosztott média/photos mappa be van csatolva
# /external/photos néven (csak olvasható), de az Immich CSAK akkor látja, ha az
# adminfelületen (Administration → External Libraries) regisztrálod a /external/photos
# útvonalat. Compose ezt NEM teszi meg automatikusan — ez egy telepítés utáni lépés.
- 'Külső könyvtár (opcionális): Administration → External Libraries → add /external/photos'
prerequisites:
- 'Külső HDD szükséges a fotók és videók tárolásához'
- 'Legalább 4 GB szabad RAM ajánlott (gépi tanulás funkciókhoz)'
- 'x86 processzor szükséges (nem fut Raspberry Pi-n)'
# --- Controller-side health probe ---
healthcheck:
# container: no exact match and FOUR `immich-*` containers, so the old prefix rule picked whichever the
# container list happened to yield first — it could have been `immich-postgres` (R-630)
container: immich-server
checks:
- type: api
port: 2283
path: "/api/server/ping"
expect:
status: 200
# --- English copy (localisation slice 5, R-560) --------------------------------------------
# The Hungarian above is UNCHANGED. A box on English reads this block field by field; a missing
# field shows the Hungarian one; a controller older than 0.257.0 ignores the block entirely.
i18n:
en:
description: 'Photos and videos in one place (a Google Photos alternative)'
app_info:
tagline: 'A Google Photos alternative - your photos back themselves up and sort themselves'
use_cases:
- 'Photos and videos back themselves up from your phone'
- 'It recognises faces and objects on its own'
- 'See where a photo was taken, on a map'
- 'Memories and look-backs, put together for you'
- 'Build albums and share them with the household'
first_steps:
- 'Open photos.DOMAIN in your browser'
- 'Create the admin account'
- 'Install the Immich app on your phone (Android/iOS)'
- 'Turn on automatic upload in the app'
- 'Invite the household, each with their own account'
- 'An external library (optional): Administration -> External Libraries -> add /external/photos'
prerequisites:
- 'An external hard drive is needed to keep the photos and videos on'
- 'At least 4 GB of free RAM is recommended (for the machine learning features)'
- 'An x86 processor is needed (it does not run on a Raspberry Pi)'
deploy_fields:
- env_var: DOMAIN
label: 'Domain'
description: 'The server domain name'
- env_var: SUBDOMAIN
label: 'Subdomain'
description: 'The subdomain this app answers on'
- env_var: DB_PASSWORD
label: 'Database password'
- env_var: HDD_PATH
label: 'Data storage path'
description: 'The path to the external hard drive where the photos and videos are kept'
placeholder: '/mnt/felhom-drives/hdd_1'
@@ -0,0 +1,146 @@
# Immich - Self-hosted Photo & Video Management
# Domain: ${SUBDOMAIN}.${DOMAIN}
# Database: PostgreSQL (with VectorChord) + Redis
# RAM: ~4GB minimum (mem_limit: 4096M total — server 2048M + ML 1536M + postgres 256M + redis 128M) | Pi-compatible: No (ML too heavy)
#
# Environment variables:
# DOMAIN - Your domain (e.g., demo-felhom.eu)
# HDD_PATH - Drive namespace root (managed upload lives under appdata)
# USERDATA_PATH - Ügyfél-tartalom gyökér (<namespace>/userdata)
# DB_PASSWORD - PostgreSQL password (auto-generated)
#
# Storage layout (felhom userdata convention):
# Managed upload (Immich-owned) → ${HDD_PATH}/appdata/immich (HDD, host path — app-managed)
# External photo library (RO) → ${USERDATA_PATH}/media/photos → /external/photos
# PostgreSQL data → immich_postgres_data (named volume, NVMe)
# ML model cache → immich_ml_cache (named volume, NVMe)
# Redis data → immich_redis_data (named volume, NVMe)
#
# ⚠ EXTERNAL LIBRARY IS NOT WIRED BY COMPOSE: mounting /external/photos only makes the files
# visible to the container. To actually surface them in Immich you MUST register an External
# Library pointing at /external/photos in the Immich admin UI (Administration → External
# Libraries) or via the API — a POST-DEPLOY step. Until then photos sharing is "mount ready,
# registration pending". See .felhom.yml first_steps + REPORT.
#
# First-time setup:
# Create admin account on first visit, then register the External Library (see above).
services:
immich-server:
image: ghcr.io/immich-app/immich-server:v3.2.2
container_name: immich-server
restart: unless-stopped
depends_on:
immich-postgres:
condition: service_healthy
immich-redis:
condition: service_healthy
environment:
- DB_PASSWORD=${DB_PASSWORD}
- DB_HOSTNAME=immich-postgres
- DB_USERNAME=immich
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=immich-redis
- IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
- TZ=Europe/Budapest
volumes:
- ${HDD_PATH}/appdata/immich:/usr/src/app/upload
- ${USERDATA_PATH}/media/photos:/external/photos:ro
networks:
- traefik-public
- immich-internal
deploy:
resources:
limits:
memory: 2048M
healthcheck:
test: ["CMD", "curl", "-sf", "http://127.0.0.1:2283/api/server/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
labels:
- "traefik.enable=true"
- "traefik.http.routers.immich.rule=Host(`${SUBDOMAIN}.${DOMAIN}`)"
- "traefik.http.routers.immich.entrypoints=websecure"
- "traefik.http.routers.immich.tls=true"
- "traefik.http.routers.immich.tls.certresolver=letsencrypt"
- "traefik.http.services.immich.loadbalancer.server.port=2283"
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:v3.0.3
container_name: immich-machine-learning
restart: unless-stopped
environment:
- TZ=Europe/Budapest
- TRANSFORMERS_CACHE=/cache
volumes:
- immich_ml_cache:/cache
networks:
- immich-internal
deploy:
resources:
limits:
memory: 1536M
healthcheck:
test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:3003/ping')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 120s
immich-postgres:
image: ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0
container_name: immich-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=immich
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=immich
- POSTGRES_INITDB_ARGS=--data-checksums
- TZ=Europe/Budapest
volumes:
- immich_postgres_data:/var/lib/postgresql/data
networks:
- immich-internal
deploy:
resources:
limits:
memory: 768M
healthcheck:
test: ["CMD-SHELL", "pg_isready -U immich -d immich"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
immich-redis:
image: redis:7-alpine
container_name: immich-redis
restart: unless-stopped
command: redis-server --appendonly yes
environment:
- TZ=Europe/Budapest
volumes:
- immich_redis_data:/data
networks:
- immich-internal
deploy:
resources:
limits:
memory: 128M
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
volumes:
immich_ml_cache:
immich_postgres_data:
immich_redis_data:
networks:
traefik-public:
external: true
immich-internal:
@@ -0,0 +1,72 @@
# More apps that update themselves — 2026-09-30 (evening, by day)
Brief: the operator's day brief of 2026-09-30 evening (Parts A–D). Architecture read first:
`architecture/09-update-architecture.md` §3 decisions 6, 13, 14, 17, 22, 30, §6.4 parts 4–7, §6.5.
Baselines (live Gitea, 16:49 CEST): controller `d48da6c` (0.283.1), agent `d766666` (0.138.0), felhom.eu
`2866f6a`, catalog `4c552cf`.
**Venues.** Bench = LXC 9401 on demo-hp, made fresh at 16:52 (6 cores, 10 GiB, **swap 0** — the stricter
venue, R-733), harness v4, 10-minute memory watch (`bench/B1-bench-create.txt`). Box = scratch guest 9202
(controller 0.283.1, swap 512 MiB) pointed at the drill catalog (`box/B0`, `box/B1`), the product's guarded
Update. The drill force-push was refused once by the permission check and then allowed by the operator.
## The Part table
| Part | done / not done / changed | why |
|---|---|---|
| **A1 calibre-web** | **done** — v4.0.6 → v4.0.8, first ladder `53a4a1d` | front door = the Upload button (HTTP form), read back through OPDS + the served EPUB. The ingest folder was NOT used (it would be a file planted in a mount). `files_may_change`: the library DB `metadata.db` (+`-shm`, `-wal`) in the books folder; the book file did not change |
| **A2 gitea** | **done** — 1.27.0 → 1.27.3, first ladder `d7ba60c` | the installer-form POST (no CSRF on that form), through the setup gate on the box. 28.0.0 not touched |
| **B1 emby, ghost, home-assistant** | **done** — `3e4aa77`, `9a78e3b`, `15f4d59` | each had a newer tag inside its line (re-checked) |
| **B2 uptime-kuma, wger, crafty-controller** | **done** — `35dd5cf`, `4ad32aa` (+ fix `7a4ff48`), `e1f0179` | new fixtures; wger needed a template fix first (R-738) |
| **B2 wanderer** | **not done** | the bench cannot run it at all: its web server calls the DB at a public https name (R-739). The meilisearch question is NOT measured |
| **B3 time left** | **done** — outline `b0b2514`, rallly `8d3a35a`, zipline 4.6.1 → 4.7.0 `a9700e2` → 4.8.0 `fb87030` | zipline 4.8.0 refuses a database that skipped 4.7.x (R-742); the box undid the direct jump itself |
| **C the same-name fix gap** | **done** — row R-740, STATUS decision, `09` decision 30 dated note | measured from source, a unit walk, the registry and demo-hp; **nothing built** |
| **D immich's older step** | **done (changed)** — re-proven at 768M, step files rewritten `48440ce` | the brief's route needed a writer mode that did not exist → `upgrade-test.py --restep` `63a96b0`, with tests |
**Night-updatable apps (the audit's method (a)): 30 + 2 conditional at the start → 35 + 3 conditional** (38 carry a proven step; 15 have no ladder).
## Per app
| app | step | bench (harness v4, swap 0, 10-min watch) | anon peak (cgroup peak) | abort | box 9202 (guarded Update) | marks | catalog |
|---|---|---|---|---|---|---|---|
| calibre-web | v4.0.6 → v4.0.8 | proven, read back before/after True/True, kills 0 | calibre-web 19.3 % (38.9 %) | starts-and-serves | done in 64.6 s, read back True | files_may_change | `53a4a1d` |
| gitea | 1.27.0 → 1.27.3 | proven, read back before/after True/True, kills 0 | gitea 26.6 % (52.9 %) | refuses | done in 21.6 s, read back True | — | `d7ba60c` |
| emby | 4.11.0.3 → 4.11.0.4 | proven, read back before/after True/True, kills 0 | emby 4.7 % (7.3 %) | starts-and-serves | done in 23.6 s, read back True | — | `3e4aa77` |
| ghost | 6.65.0-alpine → 6.67.0-alpine | proven, read back before/after True/True, kills 0 | ghost 26.7 % (33.9 %) | starts-and-serves | done in 107.7 s, read back True | — | `9a78e3b` |
| home-assistant | 2026.9.3 → 2026.9.4 | proven, read back before/after True/True, kills 0 | home-assistant 32.0 % (47.4 %) | starts-and-serves | done in 113.8 s, read back True | — | `15f4d59` |
| uptime-kuma | 2.4.0 → 2.5.5 | proven, read back before/after True/True, kills 0 | uptime-kuma 43.3 % (49.7 %) | starts-and-serves | done in 33.9 s, read back True | — | `35dd5cf` |
| wger | 2.6 → 2.7 | proven, read back before/after True/True, kills 0 | wger 49.8 % (78.6 %) | starts-data-gone | done in 46.2 s, read back True | — | `4ad32aa (+ fix 7a4ff48)` |
| crafty-controller | 4.10.7 → 4.11.0 | proven, read back before/after True/True, kills 0 | crafty-controller 2.7 % (8.0 %) | starts-and-serves | done in 51.3 s, read back True | — | `e1f0179` |
| outline | 1.9.1 → 1.10.1 | proven, read back before/after True/True, kills 0 | outline 33.5 % (37.7 %), outline-postgres 5.4 % (62.1 %), outline-redis 2.6 % (7.1 %) | starts-and-serves | done in 89.2 s, read back True | — | `b0b2514` |
| rallly | 4.11.1 → 4.15.3 | proven, read back before/after True/True, kills 0 | rallly 60.6 % (64.0 %), rallly-postgres 2.1 % (65.8 %) | starts-data-gone | done in 64.7 s, read back True | — | `8d3a35a` |
| zipline | 4.6.1 → 4.7.0 | proven, first try (after the fixture was fixed; see the direct jump below) | zipline 41.7 % | starts-and-serves | done in 103.6 s, read back True | — | `a9700e2` |
| zipline | 4.7.0 → 4.8.0 | proven (third attempt: two FROM pulls failed on the bench's full disk) | zipline 34.3 % | starts-and-serves | done in 32.8 s, read back True | — | `fb87030` |
| zipline | 4.6.1 → 4.8.0 (direct) | **failed** — 4.8.0 restarts: „cannot safely migrate from prisma to drizzle" | — | starts-and-serves | **undone** by the box in 20 s | — | not written (R-742) |
| wger | 2.6 → 2.7 WITHOUT the migrations switch | box only | — | — | **done, then login 500** (12 migrations unapplied) | — | not written; fixed `7a4ff48` (R-738) |
Files behind `files_may_change`: calibre-web — `media/books/metadata.db`, `metadata.db-shm`, `metadata.db-wal` (the
library database; the book file unchanged; `A/calibre-names/`). On 9202 the same step changed no file in that folder
(`box/calibre-web-files-{before,after,diff}.txt`). Memory figures: the anon peak is the basis of `memory_tight`
(decision 22); the cgroup peak includes the file cache.
## Part C — the same-name security fix (R-740)
`C/C1` demo-hp 9201 read-only digests (18 of 18 equal) · `C/C2` the unit walk on a scratch copy of the
controller (the leg skips `no_test_record`; the Update button takes the tested digest; a same-tag re-test
entry WOULD be pressed by the leg) · `C/C3` the floating lines' last pushes · `C/C4` no ladder has a same-tag
re-test, and the writer refuses one. The decision is in `STATUS.md`.
## Part D — immich's step `0b8272068aab36bf`
`D/D1` hub read-only: `/apps` lists 14 apps over the 3 reporting boxes, bookstack on 2 (positive control), **immich on
none**. `D/D2` the geodata inside each server image: v3.0.3 `2026-07-13`, v3.2.2 `2026-08-30`, v3.2.4 `2026-09-28` — so the
v3.0.3 → v3.2.2 step re-runs the import. `D/template-immich@0b82-768` = the step file with ONE line changed (512M → 768M)
and its `.felhom.yml` `mem_limit` 4096M → 4480M. `D/D3` + `D/evidence/D-immich-0b82-768/`: bench, swap 0 — `Starting
geodata import` 19:19:47, `Geodata import completed` 19:20:04, the database's `oom_kill` 0 from its birth, the album read
back, 10-min watch 0 kills (anon peak 29.6 %). Written by `upgrade-test.py --restep` (catalog `63a96b0`), commit `48440ce`.
## Tools
`tools/` — copies of today's walk/bench tools with this folder's paths, plus `benchsync.sh` (catalog scripts +
templates → bench), `probe_up.sh` (a hand probe), `recheck.py` (upstream tags), `digestread.py` (Part C,
read-only), `floatpush.py` (Part C), `partd.py` + `q4.sh` (Part D and the late queue).
@@ -0,0 +1,35 @@
+ date -u
Wed Sep 30 14:52:29 UTC 2026
+ pct list
VMID Status Lock Name
9201 running demo-hp
9202 running demo-hp-scratch
+ free -g
+ head -2
total used free shared buff/cache available
Mem: 29 5 14 0 10 23
+ pvesm status
+ grep -E 'local-lvm|nvme'
local-lvm lvmthin active 56487936 34802217 21685718 61.61%
nvme-scratch dir active 983379700 77130316 856222772 7.84%
+ pct config 9401
+ head -1
Configuration file 'nodes/demo-hp/lxc/9401.conf' does not exist
+ pveam download local debian-13-standard_13.6-1_amd64.tar.zst
+ tail -1
download of 'http://download.proxmox.com/images/system/debian-13-standard_13.6-1_amd64.tar.zst' to '/var/lib/vz/template/cache/debian-13-standard_13.6-1_amd64.tar.zst' finished
+ pct create 9401 local:vztmpl/debian-13-standard_13.6-1_amd64.tar.zst --hostname upgrade-harness --cores 6 --memory 10240 --swap 0 --rootfs nvme-scratch:40 --net0 name=eth0,bridge=vmbr0,ip=dhcp --unprivileged 1 --features nesting=1,keyctl=1 --onboot 0
+ tail -1
done: SHA256:VOwfGwujDPythaaASvkGKoXr1I9wWEA2bHZHiZT24XQ root@upgrade-harness
+ pct start 9401
+ sleep 15
+ pct exec 9401 -- bash -c '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 >/dev/null 2>&1; docker --version; docker compose version; python3 --version; docker network create traefik-public >/dev/null && echo traefik-public-net; swapon --show; free -m | head -3'
upgrade-harness
192.168.0.118/24
Docker version 26.1.5+dfsg1, build a72d7cd
Docker Compose version 2.26.1-4
Python 3.13.5
traefik-public-net
total used free shared buff/cache available
Mem: 10240 61 8512 0 1666 10178
Swap: 0 0 0
@@ -0,0 +1,31 @@
removed ghost:6.67.0-alpine
removed lukevella/rallly:4.15.3
removed ghcr.io/immich-app/immich-server:v3.2.4
removed crocodilestick/calibre-web-automated:v4.0.8
removed ghcr.io/home-assistant/home-assistant:2026.9.4
removed emby/embyserver:4.11.0.4
removed ghost:6.65.0-alpine
removed emby/embyserver:4.11.0.3
removed ghcr.io/home-assistant/home-assistant:2026.9.3
removed redis:7-alpine
removed postgres:18-alpine
removed registry.gitlab.com/crafty-controller/crafty-4:4.11.0
removed louislam/uptime-kuma:2.5.5
removed ghcr.io/immich-app/immich-server:v3.2.2
removed outlinewiki/outline:1.10.1
removed wger/server:2.7
removed gitea/gitea:1.27.3
removed ghcr.io/immich-app/immich-server:v3.0.3
removed ghcr.io/immich-app/immich-machine-learning:v3.0.3
removed gitea/gitea:1.27.0
removed outlinewiki/outline:1.9.1
removed flomp/wanderer-web:v0.20.0
removed flomp/wanderer-db:v0.20.0
removed lukevella/rallly:4.11.1
removed wger/server:2.6
removed registry.gitlab.com/crafty-controller/crafty-4:4.10.7
removed louislam/uptime-kuma:2.4.0
removed getmeili/meilisearch:v1.36.0
removed crocodilestick/calibre-web-automated:v4.0.6
removed ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0
/dev/loop2 40G 3.4G 34G 9% /
@@ -0,0 +1,10 @@
## 2026-09-30T18:25:45Z bench destroy
upgrade-harness
purging CT 9401 from related configurations..
destroyed-9401
template-removed
VMID Status Lock Name
9201 running demo-hp
9202 running demo-hp-scratch
local-lvm lvmthin active 56487936 34802217 21685718 61.61%
nvme-scratch dir active 983379700 77234652 856118436 7.85%
@@ -0,0 +1,36 @@
[14:58:47] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/import/calibre']
[14:58:47] MV-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[14:59:18] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[14:59:18] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[14:59:19] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[14:59:19] calibre-web: after_install :: sh: 1: python3: not found
[14:59:19] INCONCLUSIVE — no non-browser seed route. Nothing was planted by hand.
{
"harness_version": 4,
"edge": "MV-calibre-web",
"app": "calibre-web",
"note": "night 2026-09-23 within-a-major move: calibre-web=crocodilestick/calibre-web-automated:v4.0.8",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "inconclusive",
"seed_read_before": false,
"seed_read_after": false,
"healthy_after": false,
"migration_observed": null,
"abort": "not-attempted",
"abort_detail": "no non-browser seed route \u2014 tried: admin login after after_install -> 401",
"engine_state_after": null,
"memory": null,
"marks": [],
"duration_s": 31.8,
"measured_at": "2026-09-30T14:59:19Z",
"evidence": "evidence/MV-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/import/calibre"
],
"total_s": 31.8
}
@@ -0,0 +1,37 @@
[15:15:46] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/hdd/userdata/media/books', '/srv/felhom-gate/import/calibre']
[15:15:46] MV-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[15:16:17] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:16:17] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[15:16:17] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[15:16:20] calibre-web: after_install :: lse (Standard/LDAP login) Password doesn't comply with password validation rules
[15:16:20] INCONCLUSIVE — no non-browser seed route. Nothing was planted by hand.
{
"harness_version": 4,
"edge": "MV-calibre-web",
"app": "calibre-web",
"note": "night 2026-09-23 within-a-major move: calibre-web=crocodilestick/calibre-web-automated:v4.0.8",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "inconclusive",
"seed_read_before": false,
"seed_read_after": false,
"healthy_after": false,
"migration_observed": null,
"abort": "not-attempted",
"abort_detail": "no non-browser seed route \u2014 tried: admin login after after_install -> 401",
"engine_state_after": null,
"memory": null,
"marks": [],
"duration_s": 34.0,
"measured_at": "2026-09-30T15:16:20Z",
"evidence": "evidence/MV-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/hdd/userdata/media/books",
"/srv/felhom-gate/import/calibre"
],
"total_s": 34.0
}
@@ -0,0 +1,119 @@
[15:59:10] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/import/calibre']
[15:59:10] MV-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[15:59:41] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:59:41] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[15:59:41] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[15:59:44] calibre-web: after_install :: OKIE_SECURE set to False (Standard/LDAP login) Password for user 'admin' changed
[15:59:45] calibre-web: POST /upload http=200 {"location": "/tasks"}
[15:59:45] calibre-web: seeded book upg72a41d2a7698 is in the library
[15:59:51] calibre-web: readback — listed=True download_link=True book_content_served=True
[15:59:51] C1 (seed reads back BEFORE): True
[15:59:51] MV-calibre-web: swapping to TO {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'}
[16:00:28] TO up -d rc=0
[16:00:58] TO settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[16:00:59] migration lines observed: 6
[16:01:00] calibre-web: readback — listed=True download_link=True book_content_served=True
[16:01:00] RESULT (seed reads back AFTER): True
[16:01:00] files_may_change: the bind-mounted tree changed under ['/srv/felhom-gate/hdd/userdata/media/books']
[16:01:00] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8083
[16:01:15] + 15s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=296
[16:01:31] + 30s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=592
[16:01:46] + 45s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=884
[16:02:01] + 60s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=1180
[16:02:16] + 76s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=1474
[16:02:31] + 91s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=1768
[16:02:46] + 106s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2064
[16:03:01] + 121s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2356
[16:03:16] + 136s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2652
[16:03:31] + 151s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2944
[16:03:47] + 166s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=3238
[16:04:02] + 181s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=3534
[16:04:17] + 196s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=3826
[16:04:32] + 212s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=4122
[16:04:47] + 227s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=4418
[16:05:02] + 242s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=4710
[16:05:17] + 257s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5006
[16:05:32] + 272s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5302
[16:05:48] + 287s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5594
[16:06:03] + 302s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5890
[16:06:18] + 318s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=6182
[16:06:33] + 333s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=6478
[16:06:48] + 348s calibre-web=205M/768M peak=299M kills=0 rs=0 reqs=6774
[16:07:03] + 363s calibre-web=193M/768M peak=299M kills=0 rs=0 reqs=7070
[16:07:18] + 378s calibre-web=192M/768M peak=299M kills=0 rs=0 reqs=7362
[16:07:33] + 393s calibre-web=191M/768M peak=299M kills=0 rs=0 reqs=7658
[16:07:49] + 408s calibre-web=191M/768M peak=299M kills=0 rs=0 reqs=7952
[16:08:04] + 423s calibre-web=184M/768M peak=299M kills=0 rs=0 reqs=8246
[16:08:19] + 438s calibre-web=179M/768M peak=299M kills=0 rs=0 reqs=8541
[16:08:34] + 454s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=8834
[16:08:49] + 469s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=9130
[16:09:04] + 484s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=9422
[16:09:19] + 499s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=9718
[16:09:34] + 514s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=10014
[16:09:49] + 529s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=10306
[16:10:05] + 544s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=10602
[16:10:20] + 559s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=10894
[16:10:35] + 575s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=11190
[16:10:50] + 590s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=11486
[16:11:05] + 605s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=11778
[16:11:05] memory watch: killed=False tight=[] requests=11778 codes={'302': 11778}
[16:11:05] MV-calibre-web: ABORT — putting the FROM images back
[16:11:42] calibre-web: readback — listed=True download_link=True book_content_served=True
[16:11:42] ABORT: app came back in 30.8s; data present=True
{
"harness_version": 4,
"edge": "MV-calibre-web",
"app": "calibre-web",
"note": "night 2026-09-23 within-a-major move: calibre-web=crocodilestick/calibre-web-automated:v4.0.8",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kcalibre-web | [migrations] started",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": {
"soak_s": 605.0,
"requested_s": 600,
"requests": 11778,
"codes": {
"302": 11778
},
"first_kill": null,
"containers": {
"calibre-web": {
"limit": 805306368,
"peak": 313589760,
"peak_pct": 0.389,
"anon_peak_sampled": 155197440,
"anon_peak_pct": 0.193,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [
"files_may_change"
],
"duration_s": 30.8,
"measured_at": "2026-09-30T16:11:42Z",
"evidence": "evidence/MV-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/import/calibre"
],
"files_changed": [
"/srv/felhom-gate/hdd/userdata/media/books"
],
"total_s": 751.9
}
@@ -0,0 +1,194 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | ,gggg, ,ggg, gg ,gg
calibre-web | ,88"""Y8b, ,dPYb, ,dPYb, dP""Y8a 88 ,8P ,dPYb,
calibre-web | d8" `Y8 IP'`Yb IP'`Yb Yb, `88 88 d8' IP'`Yb
calibre-web | d8' 8b d8 I8 8I gg I8 8I `" 88 88 88 I8 8I
calibre-web | ,8I "Y88P' I8 8' "" I8 8' 88 88 88 I8 8'
calibre-web | I8' ,gggg,gg I8 dP gg I8 dP ,gggggg, ,ggg, aaaaaaaa 88 88 88 ,ggg, I8 dP
calibre-web | d8 dP" "Y8I I8dP 88 I8dP 88gg dP""""8I i8" "8i """""""" 88 88 88 i8" "8i I8dP 88gg
calibre-web | Y8, i8' ,8I I8P 88 I8P 8I ,8' 8I I8, ,8I Y8 ,88, 8P I8, ,8I I8P 8I
calibre-web | `Yba,,_____, ,d8, ,d8b,,d8b,_ _,88,_,d8b, ,8I ,dP Y8, `YbadP' Yb,,d8""8b,,dP `YbadP' ,d8b, ,8I
calibre-web | `"Y8888888 P"Y8888P"`Y88P'"Y888P""Y88P'"Y88P"' 8P `Y8888P"Y888 "88" "88" 888P"Y8888P'"Y88P"'
calibre-web |
calibre-web |
calibre-web | █████╗ ██╗ ██╗████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗██████╗
calibre-web | ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
calibre-web | ███████║██║ ██║ ██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ██║ ██║
calibre-web | ██╔══██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ██║ ██║
calibre-web | ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗██████╔╝
calibre-web | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝
calibre-web |
calibre-web |
calibre-web | ~~~ Based on docker-calibre-web from linuxserver.io & Calibre-Web by janeczku ~~~
calibre-web |
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | To support the app dev(s) visit:
calibre-web | Calibre-Web Automated: https://ko-fi.com/crocodilestick/tip
calibre-web | To support LSIO projects visit:
calibre-web | https://www.linuxserver.io/donate/
calibre-web |
calibre-web | ───────────────────────────────────────
calibre-web | GID/UID
calibre-web | ───────────────────────────────────────
calibre-web |
calibre-web | User UID: 1000
calibre-web | User GID: 1000
calibre-web | ───────────────────────────────────────
calibre-web | [cwa-init] Starting CWA initialization process...
calibre-web | [cwa-init] Verifying essential directories...
calibre-web | [cwa-init] Directory /app/calibre-web-automated verified
calibre-web | [cwa-init] Directory /config verified
calibre-web | [cwa-init] Directory /calibre-library verified
calibre-web | [cwa-init] Directory /app/calibre verified
calibre-web | [cwa-init] Verifying essential files...
calibre-web | [cwa-init] File /app/CWA_RELEASE verified
calibre-web | [cwa-init] File /CALIBRE_RELEASE verified
calibre-web | [cwa-init] Environment verification complete
calibre-web | [cwa-init] Setting up ImageMagick policy...
calibre-web | First time run, creating app.db...
calibre-web | Successfully set kepubify paths in '/config/app.db'!
calibre-web | [cwa-init] Checking for leftover lock files from previous instance...
calibre-web | [cwa-init] No leftover lock files to remove. Ending service...
calibre-web | [cwa-init] Checking for an existing app.db in /config...
calibre-web | [cwa-init] Existing app.db found!
calibre-web | [cwa-init] Setting binary paths in '/config/app.db' to the correct ones...
calibre-web | [cwa-init] Successfully set binary paths in '/config/app.db'!
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [cwa-init] Dark theme enforcement completed.
calibre-web | [cwa-init] CWA-init complete! Service exiting now...
calibre-web | [cwa-init] No existing user_profiles.json found! Creating blank one...
calibre-web | [cwa-init] Preparing to set ownership of everything in /config, /app/calibre-web-automated, /calibre-library, /cwa-book-ingest, /calibre-library, /config/.cwa_conversion_tmp to abc:abc...
calibre-web | [cwa-init] Successfully set permissions for '/config'!
calibre-web | [cwa-init] Successfully set permissions for '/app/calibre-web-automated'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/cwa-book-ingest'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/config/.cwa_conversion_tmp'!
calibre-web | [cwa-init][qt6] Starting Qt6 compatibility check...
calibre-web | [cwa-init][qt6] Host kernel 7.0.2-6-pve >= 6.0: leaving Qt6 libs intact for full functionality. (PDF/WebEngine features enabled)
calibre-web | [cwa-init][qt6] Qt6 compatibility check completed.
calibre-web | [cwa-init] Resolving CWA versions (installed + latest stable) ...
calibre-web | [cwa-init] Installed version: v4.0.6
calibre-web | [cwa-init] Attempting to fetch latest stable version from GitHub...
calibre-web | [cwa-init] Using jq for JSON parsing...
calibre-web | [cwa-init] Successfully fetched stable version via jq: v4.0.8
calibre-web | [cwa-init] Valid stable version retrieved: v4.0.8
calibre-web | [cwa-init] Stable version persisted to /app/CWA_STABLE_RELEASE
calibre-web | [cwa-init] Versions resolved: INSTALLED=v4.0.6, STABLE=v4.0.8
calibre-web | [cwa-auto-zipper] Starting CWA-Auto-Zipper service...
calibre-web | [cwa-auto-zipper] Matching internal localtime & timezone with the one provided...
calibre-web | [calibre-binaries-setup] Starting Calibre binaries setup...
calibre-web | [cwa-process-recovery] Starting process recovery and cleanup...
calibre-web | [calibre-binaries-setup] Checking if Calibre is already installed...
calibre-web | [cwa-process-recovery] ========== Starting Recovery Sequence ==========
calibre-web | [cwa-process-recovery] Cleaning up stale temporary files...
calibre-web | [calibre-binaries-setup] Calibre version check timed out or failed, assuming not installed
calibre-web | [calibre-binaries-setup] USER NOTE: 'Ignore calibredb: command not found' above, nothing is wrong, this just indicates to CWA that Calibre still needs to be installed
calibre-web | [calibre-binaries-setup] Installing Calibre version 9.1.0...
calibre-web | [calibre-binaries-setup] This may take several minutes, please wait...
calibre-web | [cwa-auto-zipper] Zoneinfo for Europe/Budapest found. Setting /etc/localtime and /etc/timezone to match...
calibre-web | [cwa-auto-zipper] Timezone & Localtime successfully set to Europe/Budapest. Initiating Auto-Zipper ...
calibre-web | [cwa-process-recovery] Cleaned up 6 stale temporary file(s)
calibre-web | [cwa-process-recovery] Checking processing status...
calibre-web | [cwa-process-recovery] No processing status file found, creating with idle status
calibre-web | [cwa-process-recovery] Checking for orphaned CWA processes...
calibre-web | [cwa-auto-zipper] Next run in 25206 seconds.
calibre-web | [custom-init] No custom files found, skipping...
calibre-web | [cwa-process-recovery] No orphaned CWA processes found
calibre-web | [cwa-process-recovery] ========== Recovery Sequence Complete ==========
calibre-web | [cwa-process-recovery] Process recovery service finished successfully
calibre-web | [cwa-auto-library]: No existing library found. Creating new library...
calibre-web | [cwa-auto-library] Updating dirs.json with new library location...
calibre-web | [cwa-auto-library]: Updating Settings Database with library location...
calibre-web | [cwa-auto-library] Library location successfully set to: /calibre-library
calibre-web | [cwa-auto-library] Service completed successfully! Ending service...
calibre-web | xdg-desktop-menu: No writable system menu directory found.
calibre-web | Creating symlinks...
calibre-web | Symlinking /app/calibre/ebook-device to /usr/bin/ebook-device
calibre-web | Symlinking /app/calibre/ebook-meta to /usr/bin/ebook-meta
calibre-web | Symlinking /app/calibre/ebook-convert to /usr/bin/ebook-convert
calibre-web | Symlinking /app/calibre/ebook-polish to /usr/bin/ebook-polish
calibre-web | Symlinking /app/calibre/markdown-calibre to /usr/bin/markdown-calibre
calibre-web | Symlinking /app/calibre/web2disk to /usr/bin/web2disk
calibre-web | Symlinking /app/calibre/calibre-server to /usr/bin/calibre-server
calibre-web | Symlinking /app/calibre/lrf2lrs to /usr/bin/lrf2lrs
calibre-web | Symlinking /app/calibre/lrs2lrf to /usr/bin/lrs2lrf
calibre-web | Symlinking /app/calibre/calibre-debug to /usr/bin/calibre-debug
calibre-web | Symlinking /app/calibre/calibredb to /usr/bin/calibredb
calibre-web | Symlinking /app/calibre/calibre-parallel to /usr/bin/calibre-parallel
calibre-web | Symlinking /app/calibre/calibre-customize to /usr/bin/calibre-customize
calibre-web | Symlinking /app/calibre/fetch-ebook-metadata to /usr/bin/fetch-ebook-metadata
calibre-web | Symlinking /app/calibre/calibre-smtp to /usr/bin/calibre-smtp
calibre-web | Symlinking /app/calibre/calibre to /usr/bin/calibre
calibre-web | Symlinking /app/calibre/lrfviewer to /usr/bin/lrfviewer
calibre-web | Symlinking /app/calibre/ebook-viewer to /usr/bin/ebook-viewer
calibre-web | Symlinking /app/calibre/ebook-edit to /usr/bin/ebook-edit
calibre-web | Setting up command-line completion...
calibre-web | Installing zsh completion to: /usr/share/zsh/vendor-completions/_calibre
calibre-web | Failed to find directory to install bash completions, using default.
calibre-web | Installing bash completion to: /usr/share/bash-completion/completions/
calibre-web | Setting up desktop integration...
calibre-web |
calibre-web | ____________________ WARNING ____________________
calibre-web | Setting up desktop integration failed with error:
calibre-web | __________________________________________________
calibre-web |
calibre-web |
calibre-web | Traceback (most recent call last):
calibre-web | File "calibre/linux.py", line 858, in setup_desktop_integration
calibre-web | File "calibre/linux.py", line 880, in do_setup_desktop_integration
calibre-web | File "calibre/linux.py", line 960, in install_xdg_junk
calibre-web | File "subprocess.py", line 419, in check_call
calibre-web | subprocess.CalledProcessError: Command 'xdg-desktop-menu install --noupdate ./calibre-gui.desktop' returned non-zero exit status 3.
calibre-web |
calibre-web | Creating un-installer: /usr/bin/calibre-uninstall
calibre-web |
calibre-web |
calibre-web | There were 1 warnings
calibre-web |
calibre-web | * Setting up desktop integration failed with error:
calibre-web |
calibre-web | [calibre-binaries-setup] Calibre setup completed successfully!
calibre-web | [calibre-binaries-setup] Installation verified: calibredb (calibre 9.1)
calibre-web | [calibre-binaries-setup] Service completed successfully, exiting...
calibre-web | [2026-09-30 16:58:58,769] INFO {cps:92} ProxyFix configured to trust 1 proxy(ies) for X-Forwarded-* headers
calibre-web | [2026-09-30 16:58:59,017] INFO {cps.ub:1066} Migrating system magic shelves...
calibre-web | [cwa-db]: No existing CWA settings detected, applying default CWA settings...
calibre-web | [cwa-db] CWA Default Settings successfully applied!
calibre-web | [2026-09-30 16:58:59,131] INFO {cps:140} SESSION_COOKIE_SECURE set to False (Standard/LDAP login)
calibre-web | [2026-09-30 16:58:59,198] INFO {cps:197} Starting Calibre Web...
calibre-web | [2026-09-30 16:59:00,002] INFO {cps.ub:1329} github Blueprint Created
calibre-web | [2026-09-30 16:59:00,006] INFO {cps.ub:1329} google Blueprint Created
calibre-web | [2026-09-30 16:59:00,018] INFO {cps:217} OAuth blueprints initialized successfully
calibre-web | [2026-09-30 16:59:00,056] WARN {py.warnings:110} /lsiopy/lib/python3.13/site-packages/flask_limiter/extension.py:324: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
calibre-web | warnings.warn(
calibre-web |
calibre-web | [2026-09-30 16:59:00,339] INFO {apscheduler.scheduler:214} Scheduler started
calibre-web | [2026-09-30 16:59:00,340] INFO {apscheduler.scheduler:1090} Added job "delete temp" to job store "default"
calibre-web | [2026-09-30 16:59:00,340] INFO {apscheduler.scheduler:1090} Added job "delete superfluous book covers" to job store "default"
calibre-web | [2026-09-30 16:59:00,340] INFO {apscheduler.scheduler:1090} Added job "generate book covers" to job store "default"
calibre-web | [2026-09-30 16:59:00,852] INFO {apscheduler.scheduler:1090} Added job "end scheduled task" to job store "default"
calibre-web | [2026-09-30 16:59:00,857] INFO {apscheduler.scheduler:1090} Added job "clean archived book references" to job store "default"
calibre-web | [2026-09-30 16:59:00,858] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
calibre-web | [2026-09-30 16:59:00,875] INFO {apscheduler.scheduler:1090} Added job "immediately delete temp" to job store "default"
calibre-web | [2026-09-30 16:59:00,876] INFO {apscheduler.executors.default:129} Running job "immediately delete temp (trigger: date[2026-09-30 16:59:00 CEST], next run at: 2026-09-30 16:59:00 CEST)" (scheduled at 2026-09-30 16:59:00.875258+02:00)
calibre-web | [2026-09-30 16:59:00,876] INFO {apscheduler.scheduler:728} Removed job fcaaf7105ea042ef86c5ceb77ab61bf3
calibre-web | [2026-09-30 16:59:00,942] INFO {apscheduler.executors.default:156} Job "immediately delete temp (trigger: date[2026-09-30 16:59:00 CEST], next run at: 2026-09-30 16:59:00 CEST)" executed successfully
calibre-web | [2026-09-30 16:59:01,723] INFO {cps.remotelogin:32} Magic Link QRCode is enabled
calibre-web | [2026-09-30 16:59:01,887] INFO {cps.server:207} Starting Gevent server on [::]:8083
calibre-web | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web | ========== STARTING CWA-INGEST SERVICE ==========
calibre-web | [cwa-checksum-backfill] Waiting for CWA service to be ready...
calibre-web | ========== STARTING METADATA CHANGE DETECTOR ===========
calibre-web | [metadata-change-detector] Watching folder: /app/calibre-web-automated/metadata_change_logs
calibre-web | [cwa-ingest-service] Watching folder: /cwa-book-ingest
calibre-web | Setting up watches.
calibre-web | Watches established.
calibre-web | Setting up watches. Beware: since -r was given, this may take a while!
calibre-web | Watches established.
calibre-web | [2026-09-30 16:59:19,079] WARN {cps.usermanagement:137} OPDS Login failed for user "admin" IP-address: ::ffff:172.18.0.1
calibre-web | [2026-09-30 16:59:19,319] WARN {cps.usermanagement:137} OPDS Login failed for user "admin" IP-address: ::ffff:172.18.0.1
@@ -0,0 +1,7 @@
[14:58:47] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/import/calibre']
[14:58:47] MV-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[14:59:18] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[14:59:18] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[14:59:19] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[14:59:19] calibre-web: after_install :: sh: 1: python3: not found
[14:59:19] INCONCLUSIVE — no non-browser seed route. Nothing was planted by hand.
@@ -0,0 +1,29 @@
{
"harness_version": 4,
"edge": "MV-calibre-web",
"app": "calibre-web",
"note": "night 2026-09-23 within-a-major move: calibre-web=crocodilestick/calibre-web-automated:v4.0.8",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "inconclusive",
"seed_read_before": false,
"seed_read_after": false,
"healthy_after": false,
"migration_observed": null,
"abort": "not-attempted",
"abort_detail": "no non-browser seed route \u2014 tried: admin login after after_install -> 401",
"engine_state_after": null,
"memory": null,
"marks": [],
"duration_s": 31.8,
"measured_at": "2026-09-30T14:59:19Z",
"evidence": "evidence/MV-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/import/calibre"
],
"total_s": 31.8
}
@@ -0,0 +1,194 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | ,gggg, ,ggg, gg ,gg
calibre-web | ,88"""Y8b, ,dPYb, ,dPYb, dP""Y8a 88 ,8P ,dPYb,
calibre-web | d8" `Y8 IP'`Yb IP'`Yb Yb, `88 88 d8' IP'`Yb
calibre-web | d8' 8b d8 I8 8I gg I8 8I `" 88 88 88 I8 8I
calibre-web | ,8I "Y88P' I8 8' "" I8 8' 88 88 88 I8 8'
calibre-web | I8' ,gggg,gg I8 dP gg I8 dP ,gggggg, ,ggg, aaaaaaaa 88 88 88 ,ggg, I8 dP
calibre-web | d8 dP" "Y8I I8dP 88 I8dP 88gg dP""""8I i8" "8i """""""" 88 88 88 i8" "8i I8dP 88gg
calibre-web | Y8, i8' ,8I I8P 88 I8P 8I ,8' 8I I8, ,8I Y8 ,88, 8P I8, ,8I I8P 8I
calibre-web | `Yba,,_____, ,d8, ,d8b,,d8b,_ _,88,_,d8b, ,8I ,dP Y8, `YbadP' Yb,,d8""8b,,dP `YbadP' ,d8b, ,8I
calibre-web | `"Y8888888 P"Y8888P"`Y88P'"Y888P""Y88P'"Y88P"' 8P `Y8888P"Y888 "88" "88" 888P"Y8888P'"Y88P"'
calibre-web |
calibre-web |
calibre-web | █████╗ ██╗ ██╗████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗██████╗
calibre-web | ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
calibre-web | ███████║██║ ██║ ██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ██║ ██║
calibre-web | ██╔══██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ██║ ██║
calibre-web | ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗██████╔╝
calibre-web | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝
calibre-web |
calibre-web |
calibre-web | ~~~ Based on docker-calibre-web from linuxserver.io & Calibre-Web by janeczku ~~~
calibre-web |
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | To support the app dev(s) visit:
calibre-web | Calibre-Web Automated: https://ko-fi.com/crocodilestick/tip
calibre-web | To support LSIO projects visit:
calibre-web | https://www.linuxserver.io/donate/
calibre-web |
calibre-web | ───────────────────────────────────────
calibre-web | GID/UID
calibre-web | ───────────────────────────────────────
calibre-web |
calibre-web | User UID: 1000
calibre-web | User GID: 1000
calibre-web | ───────────────────────────────────────
calibre-web | [cwa-init] Starting CWA initialization process...
calibre-web | [cwa-init] Verifying essential directories...
calibre-web | [cwa-init] Directory /app/calibre-web-automated verified
calibre-web | [cwa-init] Directory /config verified
calibre-web | [cwa-init] Directory /calibre-library verified
calibre-web | [cwa-init] Directory /app/calibre verified
calibre-web | [cwa-init] Verifying essential files...
calibre-web | [cwa-init] File /app/CWA_RELEASE verified
calibre-web | [cwa-init] File /CALIBRE_RELEASE verified
calibre-web | [cwa-init] Environment verification complete
calibre-web | [cwa-init] Setting up ImageMagick policy...
calibre-web | First time run, creating app.db...
calibre-web | Successfully set kepubify paths in '/config/app.db'!
calibre-web | [cwa-init] Checking for leftover lock files from previous instance...
calibre-web | [cwa-init] No leftover lock files to remove. Ending service...
calibre-web | [cwa-init] Checking for an existing app.db in /config...
calibre-web | [cwa-init] Existing app.db found!
calibre-web | [cwa-init] Setting binary paths in '/config/app.db' to the correct ones...
calibre-web | [cwa-init] Successfully set binary paths in '/config/app.db'!
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [cwa-init] Dark theme enforcement completed.
calibre-web | [cwa-init] CWA-init complete! Service exiting now...
calibre-web | [cwa-init] No existing user_profiles.json found! Creating blank one...
calibre-web | [cwa-init] Preparing to set ownership of everything in /config, /app/calibre-web-automated, /calibre-library, /cwa-book-ingest, /calibre-library, /config/.cwa_conversion_tmp to abc:abc...
calibre-web | [cwa-init] Successfully set permissions for '/config'!
calibre-web | [cwa-init] Successfully set permissions for '/app/calibre-web-automated'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/cwa-book-ingest'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/config/.cwa_conversion_tmp'!
calibre-web | [cwa-init][qt6] Starting Qt6 compatibility check...
calibre-web | [cwa-init][qt6] Host kernel 7.0.2-6-pve >= 6.0: leaving Qt6 libs intact for full functionality. (PDF/WebEngine features enabled)
calibre-web | [cwa-init][qt6] Qt6 compatibility check completed.
calibre-web | [cwa-init] Resolving CWA versions (installed + latest stable) ...
calibre-web | [cwa-init] Installed version: v4.0.6
calibre-web | [cwa-init] Attempting to fetch latest stable version from GitHub...
calibre-web | [cwa-init] Using jq for JSON parsing...
calibre-web | [cwa-init] Successfully fetched stable version via jq: v4.0.8
calibre-web | [cwa-init] Valid stable version retrieved: v4.0.8
calibre-web | [cwa-init] Stable version persisted to /app/CWA_STABLE_RELEASE
calibre-web | [cwa-init] Versions resolved: INSTALLED=v4.0.6, STABLE=v4.0.8
calibre-web | [cwa-process-recovery] Starting process recovery and cleanup...
calibre-web | [calibre-binaries-setup] Starting Calibre binaries setup...
calibre-web | [cwa-auto-zipper] Starting CWA-Auto-Zipper service...
calibre-web | [cwa-auto-zipper] Matching internal localtime & timezone with the one provided...
calibre-web | [calibre-binaries-setup] Checking if Calibre is already installed...
calibre-web | [cwa-process-recovery] ========== Starting Recovery Sequence ==========
calibre-web | [cwa-process-recovery] Cleaning up stale temporary files...
calibre-web | [calibre-binaries-setup] Calibre version check timed out or failed, assuming not installed
calibre-web | [calibre-binaries-setup] USER NOTE: 'Ignore calibredb: command not found' above, nothing is wrong, this just indicates to CWA that Calibre still needs to be installed
calibre-web | [calibre-binaries-setup] Installing Calibre version 9.1.0...
calibre-web | [calibre-binaries-setup] This may take several minutes, please wait...
calibre-web | [cwa-auto-zipper] Zoneinfo for Europe/Budapest found. Setting /etc/localtime and /etc/timezone to match...
calibre-web | [cwa-auto-zipper] Timezone & Localtime successfully set to Europe/Budapest. Initiating Auto-Zipper ...
calibre-web | [cwa-process-recovery] Cleaned up 6 stale temporary file(s)
calibre-web | [cwa-process-recovery] Checking processing status...
calibre-web | [cwa-process-recovery] No processing status file found, creating with idle status
calibre-web | [cwa-process-recovery] Checking for orphaned CWA processes...
calibre-web | [cwa-auto-zipper] Next run in 24188 seconds.
calibre-web | [custom-init] No custom files found, skipping...
calibre-web | [cwa-process-recovery] No orphaned CWA processes found
calibre-web | [cwa-process-recovery] ========== Recovery Sequence Complete ==========
calibre-web | [cwa-process-recovery] Process recovery service finished successfully
calibre-web | [cwa-auto-library]: No existing library found. Creating new library...
calibre-web | [cwa-auto-library] Updating dirs.json with new library location...
calibre-web | [cwa-auto-library]: Updating Settings Database with library location...
calibre-web | [cwa-auto-library] Library location successfully set to: /calibre-library
calibre-web | [cwa-auto-library] Service completed successfully! Ending service...
calibre-web | xdg-desktop-menu: No writable system menu directory found.
calibre-web | Creating symlinks...
calibre-web | Symlinking /app/calibre/ebook-device to /usr/bin/ebook-device
calibre-web | Symlinking /app/calibre/ebook-meta to /usr/bin/ebook-meta
calibre-web | Symlinking /app/calibre/ebook-convert to /usr/bin/ebook-convert
calibre-web | Symlinking /app/calibre/ebook-polish to /usr/bin/ebook-polish
calibre-web | Symlinking /app/calibre/markdown-calibre to /usr/bin/markdown-calibre
calibre-web | Symlinking /app/calibre/web2disk to /usr/bin/web2disk
calibre-web | Symlinking /app/calibre/calibre-server to /usr/bin/calibre-server
calibre-web | Symlinking /app/calibre/lrf2lrs to /usr/bin/lrf2lrs
calibre-web | Symlinking /app/calibre/lrs2lrf to /usr/bin/lrs2lrf
calibre-web | Symlinking /app/calibre/calibre-debug to /usr/bin/calibre-debug
calibre-web | Symlinking /app/calibre/calibredb to /usr/bin/calibredb
calibre-web | Symlinking /app/calibre/calibre-parallel to /usr/bin/calibre-parallel
calibre-web | Symlinking /app/calibre/calibre-customize to /usr/bin/calibre-customize
calibre-web | Symlinking /app/calibre/fetch-ebook-metadata to /usr/bin/fetch-ebook-metadata
calibre-web | Symlinking /app/calibre/calibre-smtp to /usr/bin/calibre-smtp
calibre-web | Symlinking /app/calibre/calibre to /usr/bin/calibre
calibre-web | Symlinking /app/calibre/lrfviewer to /usr/bin/lrfviewer
calibre-web | Symlinking /app/calibre/ebook-viewer to /usr/bin/ebook-viewer
calibre-web | Symlinking /app/calibre/ebook-edit to /usr/bin/ebook-edit
calibre-web | Setting up command-line completion...
calibre-web | Installing zsh completion to: /usr/share/zsh/vendor-completions/_calibre
calibre-web | Failed to find directory to install bash completions, using default.
calibre-web | Installing bash completion to: /usr/share/bash-completion/completions/
calibre-web | Setting up desktop integration...
calibre-web |
calibre-web | ____________________ WARNING ____________________
calibre-web | Setting up desktop integration failed with error:
calibre-web | __________________________________________________
calibre-web |
calibre-web |
calibre-web | Traceback (most recent call last):
calibre-web | File "calibre/linux.py", line 858, in setup_desktop_integration
calibre-web | File "calibre/linux.py", line 880, in do_setup_desktop_integration
calibre-web | File "calibre/linux.py", line 960, in install_xdg_junk
calibre-web | File "subprocess.py", line 419, in check_call
calibre-web | subprocess.CalledProcessError: Command 'xdg-desktop-menu install --noupdate ./calibre-gui.desktop' returned non-zero exit status 3.
calibre-web |
calibre-web | Creating un-installer: /usr/bin/calibre-uninstall
calibre-web |
calibre-web |
calibre-web | There were 1 warnings
calibre-web |
calibre-web | * Setting up desktop integration failed with error:
calibre-web |
calibre-web | [calibre-binaries-setup] Calibre setup completed successfully!
calibre-web | [calibre-binaries-setup] Installation verified: calibredb (calibre 9.1)
calibre-web | [calibre-binaries-setup] Service completed successfully, exiting...
calibre-web | [2026-09-30 17:15:57,652] INFO {cps:92} ProxyFix configured to trust 1 proxy(ies) for X-Forwarded-* headers
calibre-web | [2026-09-30 17:15:57,889] INFO {cps.ub:1066} Migrating system magic shelves...
calibre-web | [cwa-db]: No existing CWA settings detected, applying default CWA settings...
calibre-web | [cwa-db] CWA Default Settings successfully applied!
calibre-web | [2026-09-30 17:15:58,001] INFO {cps:140} SESSION_COOKIE_SECURE set to False (Standard/LDAP login)
calibre-web | [2026-09-30 17:15:58,067] INFO {cps:197} Starting Calibre Web...
calibre-web | [2026-09-30 17:15:58,900] INFO {cps.ub:1329} github Blueprint Created
calibre-web | [2026-09-30 17:15:58,904] INFO {cps.ub:1329} google Blueprint Created
calibre-web | [2026-09-30 17:15:58,915] INFO {cps:217} OAuth blueprints initialized successfully
calibre-web | [2026-09-30 17:15:58,946] WARN {py.warnings:110} /lsiopy/lib/python3.13/site-packages/flask_limiter/extension.py:324: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
calibre-web | warnings.warn(
calibre-web |
calibre-web | [2026-09-30 17:15:59,211] INFO {apscheduler.scheduler:214} Scheduler started
calibre-web | [2026-09-30 17:15:59,212] INFO {apscheduler.scheduler:1090} Added job "delete temp" to job store "default"
calibre-web | [2026-09-30 17:15:59,212] INFO {apscheduler.scheduler:1090} Added job "delete superfluous book covers" to job store "default"
calibre-web | [2026-09-30 17:15:59,212] INFO {apscheduler.scheduler:1090} Added job "generate book covers" to job store "default"
calibre-web | [2026-09-30 17:15:59,736] INFO {apscheduler.scheduler:1090} Added job "end scheduled task" to job store "default"
calibre-web | [2026-09-30 17:15:59,741] INFO {apscheduler.scheduler:1090} Added job "clean archived book references" to job store "default"
calibre-web | [2026-09-30 17:15:59,742] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
calibre-web | [2026-09-30 17:15:59,760] INFO {apscheduler.scheduler:1090} Added job "immediately delete temp" to job store "default"
calibre-web | [2026-09-30 17:15:59,778] INFO {apscheduler.executors.default:129} Running job "immediately delete temp (trigger: date[2026-09-30 17:15:59 CEST], next run at: 2026-09-30 17:15:59 CEST)" (scheduled at 2026-09-30 17:15:59.759992+02:00)
calibre-web | [2026-09-30 17:15:59,778] INFO {apscheduler.scheduler:728} Removed job 38cabeea21b74d5cae806e8ceb6478d4
calibre-web | [2026-09-30 17:15:59,779] INFO {apscheduler.executors.default:156} Job "immediately delete temp (trigger: date[2026-09-30 17:15:59 CEST], next run at: 2026-09-30 17:15:59 CEST)" executed successfully
calibre-web | [2026-09-30 17:16:00,621] INFO {cps.remotelogin:32} Magic Link QRCode is enabled
calibre-web | [2026-09-30 17:16:00,803] INFO {cps.server:207} Starting Gevent server on [::]:8083
calibre-web | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web | ========== STARTING METADATA CHANGE DETECTOR ===========
calibre-web | ========== STARTING CWA-INGEST SERVICE ==========
calibre-web | [cwa-checksum-backfill] Waiting for CWA service to be ready...
calibre-web | [metadata-change-detector] Watching folder: /app/calibre-web-automated/metadata_change_logs
calibre-web | [cwa-ingest-service] Watching folder: /cwa-book-ingest
calibre-web | Setting up watches.
calibre-web | Watches established.
calibre-web | Setting up watches. Beware: since -r was given, this may take a while!
calibre-web | Watches established.
calibre-web | [2026-09-30 17:16:17,718] WARN {cps.usermanagement:137} OPDS Login failed for user "admin" IP-address: ::ffff:172.18.0.1
calibre-web | [2026-09-30 17:16:20,259] WARN {cps.usermanagement:137} OPDS Login failed for user "admin" IP-address: ::ffff:172.18.0.1
@@ -0,0 +1,7 @@
[15:15:46] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/hdd/userdata/media/books', '/srv/felhom-gate/import/calibre']
[15:15:46] MV-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[15:16:17] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:16:17] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[15:16:17] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[15:16:20] calibre-web: after_install :: lse (Standard/LDAP login) Password doesn't comply with password validation rules
[15:16:20] INCONCLUSIVE — no non-browser seed route. Nothing was planted by hand.
@@ -0,0 +1,30 @@
{
"harness_version": 4,
"edge": "MV-calibre-web",
"app": "calibre-web",
"note": "night 2026-09-23 within-a-major move: calibre-web=crocodilestick/calibre-web-automated:v4.0.8",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "inconclusive",
"seed_read_before": false,
"seed_read_after": false,
"healthy_after": false,
"migration_observed": null,
"abort": "not-attempted",
"abort_detail": "no non-browser seed route \u2014 tried: admin login after after_install -> 401",
"engine_state_after": null,
"memory": null,
"marks": [],
"duration_s": 34.0,
"measured_at": "2026-09-30T15:16:20Z",
"evidence": "evidence/MV-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/hdd/userdata/media/books",
"/srv/felhom-gate/import/calibre"
],
"total_s": 34.0
}
@@ -0,0 +1,8 @@
{
"calibre-web": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,198 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | ,gggg, ,ggg, gg ,gg
calibre-web | ,88"""Y8b, ,dPYb, ,dPYb, dP""Y8a 88 ,8P ,dPYb,
calibre-web | d8" `Y8 IP'`Yb IP'`Yb Yb, `88 88 d8' IP'`Yb
calibre-web | d8' 8b d8 I8 8I gg I8 8I `" 88 88 88 I8 8I
calibre-web | ,8I "Y88P' I8 8' "" I8 8' 88 88 88 I8 8'
calibre-web | I8' ,gggg,gg I8 dP gg I8 dP ,gggggg, ,ggg, aaaaaaaa 88 88 88 ,ggg, I8 dP
calibre-web | d8 dP" "Y8I I8dP 88 I8dP 88gg dP""""8I i8" "8i """""""" 88 88 88 i8" "8i I8dP 88gg
calibre-web | Y8, i8' ,8I I8P 88 I8P 8I ,8' 8I I8, ,8I Y8 ,88, 8P I8, ,8I I8P 8I
calibre-web | `Yba,,_____, ,d8, ,d8b,,d8b,_ _,88,_,d8b, ,8I ,dP Y8, `YbadP' Yb,,d8""8b,,dP `YbadP' ,d8b, ,8I
calibre-web | `"Y8888888 P"Y8888P"`Y88P'"Y888P""Y88P'"Y88P"' 8P `Y8888P"Y888 "88" "88" 888P"Y8888P'"Y88P"'
calibre-web |
calibre-web |
calibre-web | █████╗ ██╗ ██╗████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗██████╗
calibre-web | ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
calibre-web | ███████║██║ ██║ ██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ██║ ██║
calibre-web | ██╔══██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ██║ ██║
calibre-web | ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗██████╔╝
calibre-web | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝
calibre-web |
calibre-web |
calibre-web | ~~~ Based on docker-calibre-web from linuxserver.io & Calibre-Web by janeczku ~~~
calibre-web |
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | To support the app dev(s) visit:
calibre-web | Calibre-Web Automated: https://ko-fi.com/crocodilestick/tip
calibre-web | To support LSIO projects visit:
calibre-web | https://www.linuxserver.io/donate/
calibre-web |
calibre-web | ───────────────────────────────────────
calibre-web | GID/UID
calibre-web | ───────────────────────────────────────
calibre-web |
calibre-web | User UID: 1000
calibre-web | User GID: 1000
calibre-web | ───────────────────────────────────────
calibre-web | [cwa-init] Starting CWA initialization process...
calibre-web | [cwa-init] Verifying essential directories...
calibre-web | [cwa-init] Directory /app/calibre-web-automated verified
calibre-web | [cwa-init] Directory /config verified
calibre-web | [cwa-init] Directory /calibre-library verified
calibre-web | [cwa-init] Directory /app/calibre verified
calibre-web | [cwa-init] Verifying essential files...
calibre-web | [cwa-init] File /app/CWA_RELEASE verified
calibre-web | [cwa-init] File /CALIBRE_RELEASE verified
calibre-web | [cwa-init] Environment verification complete
calibre-web | [cwa-init] Setting up ImageMagick policy...
calibre-web | [cwa-init] Checking for leftover lock files from previous instance...
calibre-web | [cwa-init] No leftover lock files to remove. Ending service...
calibre-web | [cwa-init] Checking for an existing app.db in /config...
calibre-web | [cwa-init] Existing app.db found!
calibre-web | [cwa-init] Setting binary paths in '/config/app.db' to the correct ones...
calibre-web | [cwa-init] Successfully set binary paths in '/config/app.db'!
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [cwa-init] Dark theme enforcement completed.
calibre-web | [cwa-init] CWA-init complete! Service exiting now...
calibre-web | [cwa-init] Existing user_profiles.json found!
calibre-web | [cwa-init] Preparing to set ownership of everything in /config, /app/calibre-web-automated, /calibre-library, /cwa-book-ingest, /calibre-library, /config/.cwa_conversion_tmp to abc:abc...
calibre-web | [cwa-init] Successfully set permissions for '/config'!
calibre-web | [cwa-init] Successfully set permissions for '/app/calibre-web-automated'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/cwa-book-ingest'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/config/.cwa_conversion_tmp'!
calibre-web | [cwa-init][qt6] Starting Qt6 compatibility check...
calibre-web | [cwa-init][qt6] Host kernel 7.0.2-6-pve >= 6.0: leaving Qt6 libs intact for full functionality. (PDF/WebEngine features enabled)
calibre-web | [cwa-init][qt6] Qt6 compatibility check completed.
calibre-web | [cwa-init] Resolving CWA versions (installed + latest stable) ...
calibre-web | [cwa-init] Installed version: v4.0.6
calibre-web | [cwa-init] Attempting to fetch latest stable version from GitHub...
calibre-web | [cwa-init] Using jq for JSON parsing...
calibre-web | [cwa-init] Successfully fetched stable version via jq: v4.0.8
calibre-web | [cwa-init] Valid stable version retrieved: v4.0.8
calibre-web | [cwa-init] Stable version persisted to /app/CWA_STABLE_RELEASE
calibre-web | [cwa-init] Versions resolved: INSTALLED=v4.0.6, STABLE=v4.0.8
calibre-web | [cwa-process-recovery] Starting process recovery and cleanup...
calibre-web | [cwa-auto-zipper] Starting CWA-Auto-Zipper service...
calibre-web | [cwa-auto-zipper] Matching internal localtime & timezone with the one provided...
calibre-web | [cwa-process-recovery] ========== Starting Recovery Sequence ==========
calibre-web | [cwa-process-recovery] Cleaning up stale temporary files...
calibre-web | [calibre-binaries-setup] Starting Calibre binaries setup...
calibre-web | [calibre-binaries-setup] Checking if Calibre is already installed...
calibre-web | [calibre-binaries-setup] Calibre version check timed out or failed, assuming not installed
calibre-web | [calibre-binaries-setup] USER NOTE: 'Ignore calibredb: command not found' above, nothing is wrong, this just indicates to CWA that Calibre still needs to be installed
calibre-web | [calibre-binaries-setup] Installing Calibre version 9.1.0...
calibre-web | [calibre-binaries-setup] This may take several minutes, please wait...
calibre-web | [cwa-auto-zipper] Zoneinfo for Europe/Budapest found. Setting /etc/localtime and /etc/timezone to match...
calibre-web | [cwa-process-recovery] Cleaned up 6 stale temporary file(s)
calibre-web | [cwa-process-recovery] Checking processing status...
calibre-web | [cwa-auto-zipper] Timezone & Localtime successfully set to Europe/Budapest. Initiating Auto-Zipper ...
calibre-web | [cwa-process-recovery] Processing status is: idle
calibre-web | [cwa-process-recovery] Checking for orphaned CWA processes...
calibre-web | [custom-init] No custom files found, skipping...
calibre-web | [cwa-auto-zipper] Next run in 20866 seconds.
calibre-web | [cwa-process-recovery] No orphaned CWA processes found
calibre-web | [cwa-process-recovery] ========== Recovery Sequence Complete ==========
calibre-web | [cwa-process-recovery] Process recovery service finished successfully
calibre-web | [cwa-auto-library]: Existing library found at /calibre-library, mounting now...
calibre-web | [cwa-auto-library] Updating dirs.json with new library location...
calibre-web | [cwa-auto-library]: Updating Settings Database with library location...
calibre-web | [cwa-auto-library] Library location successfully set to: /calibre-library
calibre-web | [cwa-auto-library] Service completed successfully! Ending service...
calibre-web | xdg-desktop-menu: No writable system menu directory found.
calibre-web | Creating symlinks...
calibre-web | Symlinking /app/calibre/ebook-device to /usr/bin/ebook-device
calibre-web | Symlinking /app/calibre/ebook-meta to /usr/bin/ebook-meta
calibre-web | Symlinking /app/calibre/ebook-convert to /usr/bin/ebook-convert
calibre-web | Symlinking /app/calibre/ebook-polish to /usr/bin/ebook-polish
calibre-web | Symlinking /app/calibre/markdown-calibre to /usr/bin/markdown-calibre
calibre-web | Symlinking /app/calibre/web2disk to /usr/bin/web2disk
calibre-web | Symlinking /app/calibre/calibre-server to /usr/bin/calibre-server
calibre-web | Symlinking /app/calibre/lrf2lrs to /usr/bin/lrf2lrs
calibre-web | Symlinking /app/calibre/lrs2lrf to /usr/bin/lrs2lrf
calibre-web | Symlinking /app/calibre/calibre-debug to /usr/bin/calibre-debug
calibre-web | Symlinking /app/calibre/calibredb to /usr/bin/calibredb
calibre-web | Symlinking /app/calibre/calibre-parallel to /usr/bin/calibre-parallel
calibre-web | Symlinking /app/calibre/calibre-customize to /usr/bin/calibre-customize
calibre-web | Symlinking /app/calibre/fetch-ebook-metadata to /usr/bin/fetch-ebook-metadata
calibre-web | Symlinking /app/calibre/calibre-smtp to /usr/bin/calibre-smtp
calibre-web | Symlinking /app/calibre/calibre to /usr/bin/calibre
calibre-web | Symlinking /app/calibre/lrfviewer to /usr/bin/lrfviewer
calibre-web | Symlinking /app/calibre/ebook-viewer to /usr/bin/ebook-viewer
calibre-web | Symlinking /app/calibre/ebook-edit to /usr/bin/ebook-edit
calibre-web | Setting up command-line completion...
calibre-web | Installing zsh completion to: /usr/share/zsh/vendor-completions/_calibre
calibre-web | Failed to find directory to install bash completions, using default.
calibre-web | Installing bash completion to: /usr/share/bash-completion/completions/
calibre-web | Setting up desktop integration...
calibre-web |
calibre-web | ____________________ WARNING ____________________
calibre-web | Setting up desktop integration failed with error:
calibre-web | __________________________________________________
calibre-web |
calibre-web |
calibre-web | Traceback (most recent call last):
calibre-web | File "calibre/linux.py", line 858, in setup_desktop_integration
calibre-web | File "calibre/linux.py", line 880, in do_setup_desktop_integration
calibre-web | File "calibre/linux.py", line 960, in install_xdg_junk
calibre-web | File "subprocess.py", line 419, in check_call
calibre-web | subprocess.CalledProcessError: Command 'xdg-desktop-menu install --noupdate ./calibre-gui.desktop' returned non-zero exit status 3.
calibre-web |
calibre-web | Creating un-installer: /usr/bin/calibre-uninstall
calibre-web |
calibre-web |
calibre-web | There were 1 warnings
calibre-web |
calibre-web | * Setting up desktop integration failed with error:
calibre-web |
calibre-web | [calibre-binaries-setup] Calibre setup completed successfully!
calibre-web | [calibre-binaries-setup] Installation verified: calibredb (calibre 9.1)
calibre-web | [calibre-binaries-setup] Service completed successfully, exiting...
calibre-web | [2026-09-30 18:11:19,461] INFO {cps:92} ProxyFix configured to trust 1 proxy(ies) for X-Forwarded-* headers
calibre-web | [2026-09-30 18:11:19,540] INFO {cps.ub:1066} Migrating system magic shelves...
calibre-web | [2026-09-30 18:11:19,560] INFO {cps.ub:1119} System shelf migration complete: 1 old shelves removed, 0 new shelves created
calibre-web | [2026-09-30 18:11:19,651] INFO {cps:140} SESSION_COOKIE_SECURE set to False (Standard/LDAP login)
calibre-web | [2026-09-30 18:11:19,695] INFO {cps:197} Starting Calibre Web...
calibre-web | [2026-09-30 18:11:20,551] INFO {cps:217} OAuth blueprints initialized successfully
calibre-web | [2026-09-30 18:11:20,576] WARN {py.warnings:110} /lsiopy/lib/python3.13/site-packages/flask_limiter/extension.py:324: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
calibre-web | warnings.warn(
calibre-web |
calibre-web | [2026-09-30 18:11:20,832] INFO {apscheduler.scheduler:214} Scheduler started
calibre-web | [2026-09-30 18:11:20,833] INFO {apscheduler.scheduler:1090} Added job "delete temp" to job store "default"
calibre-web | [2026-09-30 18:11:20,833] INFO {apscheduler.scheduler:1090} Added job "delete superfluous book covers" to job store "default"
calibre-web | [2026-09-30 18:11:20,833] INFO {apscheduler.scheduler:1090} Added job "generate book covers" to job store "default"
calibre-web | [2026-09-30 18:11:21,463] INFO {apscheduler.scheduler:1090} Added job "end scheduled task" to job store "default"
calibre-web | [2026-09-30 18:11:21,468] INFO {apscheduler.scheduler:1090} Added job "clean archived book references" to job store "default"
calibre-web | [2026-09-30 18:11:21,469] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
calibre-web | [2026-09-30 18:11:21,490] INFO {apscheduler.scheduler:1090} Added job "immediately delete temp" to job store "default"
calibre-web | [2026-09-30 18:11:21,490] INFO {apscheduler.executors.default:129} Running job "immediately delete temp (trigger: date[2026-09-30 18:11:21 CEST], next run at: 2026-09-30 18:11:21 CEST)" (scheduled at 2026-09-30 18:11:21.489899+02:00)
calibre-web | [2026-09-30 18:11:21,491] INFO {apscheduler.scheduler:728} Removed job af2d019d2e1a406ab07f108ebaba83cd
calibre-web | [2026-09-30 18:11:21,576] INFO {apscheduler.executors.default:156} Job "immediately delete temp (trigger: date[2026-09-30 18:11:21 CEST], next run at: 2026-09-30 18:11:21 CEST)" executed successfully
calibre-web | [2026-09-30 18:11:22,456] INFO {cps.remotelogin:32} Magic Link QRCode is enabled
calibre-web | [2026-09-30 18:11:22,639] INFO {cps.server:207} Starting Gevent server on [::]:8083
calibre-web | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web | ========== STARTING METADATA CHANGE DETECTOR ===========
calibre-web | [cwa-checksum-backfill] Waiting for CWA service to be ready...
calibre-web | ========== STARTING CWA-INGEST SERVICE ==========
calibre-web | [metadata-change-detector] Watching folder: /app/calibre-web-automated/metadata_change_logs
calibre-web | [cwa-ingest-service] Watching folder: /cwa-book-ingest
calibre-web | Setting up watches.
calibre-web | Watches established.
calibre-web | Setting up watches. Beware: since -r was given, this may take a while!
calibre-web | Watches established.
calibre-web | [2026-09-30 18:11:41,223] WARN {cps.usermanagement:137} OPDS Login failed for user "admin" IP-address: ::ffff:172.18.0.1
calibre-web | [2026-09-30 18:11:42,336] INFO {cps.helper:1265} Renamed exported file to match expected name: upg72a41d2a7698 - Drill Author.epub
calibre-web | [2026-09-30 18:11:42,337] ERROR {cps.progress_syncing.checksums.manager:128} Failed to store checksum for book 2: (sqlite3.OperationalError) no such table: book_format_checksums
calibre-web | [SQL:
calibre-web | SELECT id FROM book_format_checksums
calibre-web | WHERE book = ?
calibre-web | AND format = ?
calibre-web | AND checksum = ?
calibre-web | ]
calibre-web | [parameters: (2, 'EPUB', '7c1661fba0e6a4d56e89c7402f7d9f72')]
calibre-web | (Background on this error at: https://sqlalche.me/e/20/e3q8)
@@ -0,0 +1,4 @@
{
"/srv/felhom-gate/hdd/userdata/media/books": "46c3e8f91171f011c1adda3a9159b9c0266332b85cdc9d7a6743998cfc308e2a",
"/srv/felhom-gate/import/calibre": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,4 @@
{
"/srv/felhom-gate/hdd/userdata/media/books": "560b1d4c34cb8339249f388e10101001332a92291887b95029727251f986502b",
"/srv/felhom-gate/import/calibre": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,682 @@
[
{
"t": 15.1,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248193024,
"peak": 313589760,
"anon": 154927104,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 296
},
{
"t": 30.2,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248201216,
"peak": 313589760,
"anon": 154972160,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 592
},
{
"t": 45.3,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248369152,
"peak": 313589760,
"anon": 155025408,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 884
},
{
"t": 60.4,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248475648,
"peak": 313589760,
"anon": 155066368,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1180
},
{
"t": 75.6,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248356864,
"peak": 313589760,
"anon": 155111424,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1474
},
{
"t": 90.7,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248578048,
"peak": 313589760,
"anon": 155144192,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1768
},
{
"t": 105.8,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248414208,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2064
},
{
"t": 120.9,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248324096,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2356
},
{
"t": 136.0,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248279040,
"peak": 313589760,
"anon": 155189248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2652
},
{
"t": 151.2,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248217600,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2944
},
{
"t": 166.3,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248307712,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3238
},
{
"t": 181.4,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248631296,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3534
},
{
"t": 196.5,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248553472,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3826
},
{
"t": 211.6,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248086528,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4122
},
{
"t": 226.8,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248877056,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4418
},
{
"t": 241.9,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248320000,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4710
},
{
"t": 257.0,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248381440,
"peak": 313589760,
"anon": 155185152,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5006
},
{
"t": 272.1,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248348672,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5302
},
{
"t": 287.2,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248123392,
"peak": 313589760,
"anon": 155185152,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5594
},
{
"t": 302.4,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248279040,
"peak": 313589760,
"anon": 155189248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5890
},
{
"t": 317.5,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 248233984,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6182
},
{
"t": 332.6,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 247726080,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6478
},
{
"t": 347.8,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 215519232,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6774
},
{
"t": 362.9,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 202870784,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7070
},
{
"t": 378.0,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 201945088,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7362
},
{
"t": 393.1,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 201293824,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7658
},
{
"t": 408.3,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 201256960,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7952
},
{
"t": 423.4,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 193085440,
"peak": 313589760,
"anon": 155181056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8246
},
{
"t": 438.5,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 187990016,
"peak": 313589760,
"anon": 155185152,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8541
},
{
"t": 453.6,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 190087168,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8834
},
{
"t": 468.7,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189616128,
"peak": 313589760,
"anon": 155189248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9130
},
{
"t": 483.8,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189603840,
"peak": 313589760,
"anon": 155176960,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9422
},
{
"t": 499.0,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189374464,
"peak": 313589760,
"anon": 155193344,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9718
},
{
"t": 514.1,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189816832,
"peak": 313589760,
"anon": 155185152,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10014
},
{
"t": 529.2,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189591552,
"peak": 313589760,
"anon": 155193344,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10306
},
{
"t": 544.3,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189870080,
"peak": 313589760,
"anon": 155189248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10602
},
{
"t": 559.4,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189612032,
"peak": 313589760,
"anon": 155189248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10894
},
{
"t": 574.6,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 189796352,
"peak": 313589760,
"anon": 155197440,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11190
},
{
"t": 589.7,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 190513152,
"peak": 313589760,
"anon": 155197440,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11486
},
{
"t": 604.8,
"containers": {
"calibre-web": {
"limit": 805306368,
"current": 190492672,
"peak": 313589760,
"anon": 155197440,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11778
}
]
@@ -0,0 +1,6 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [2026-09-30 18:00:37,594] INFO {cps.ub:1144} Migrating system magic shelves...
calibre-web | [2026-09-30 18:00:37,618] INFO {cps.ub:1197} System shelf migration complete: 0 old shelves removed, 1 new shelves created
calibre-web | [2026-09-30 18:00:39,359] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
@@ -0,0 +1,62 @@
[15:59:10] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/import/calibre']
[15:59:10] MV-calibre-web: deploying calibre-web at FROM {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.6'}
[15:59:41] FROM settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:59:41] fixture: the BOX walk's own (CalibreWeb), through upgrade_boxport
[15:59:41] calibre-web: the generated admin password does not log in (opds http=401) — running the template's own after_install command (the app's CLI, as the product does after an install)
[15:59:44] calibre-web: after_install :: OKIE_SECURE set to False (Standard/LDAP login) Password for user 'admin' changed
[15:59:45] calibre-web: POST /upload http=200 {"location": "/tasks"}
[15:59:45] calibre-web: seeded book upg72a41d2a7698 is in the library
[15:59:51] calibre-web: readback — listed=True download_link=True book_content_served=True
[15:59:51] C1 (seed reads back BEFORE): True
[15:59:51] MV-calibre-web: swapping to TO {'calibre-web': 'crocodilestick/calibre-web-automated:v4.0.8'}
[16:00:28] TO up -d rc=0
[16:00:58] TO settled=True in 30.8s :: {"calibre-web": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[16:00:59] migration lines observed: 6
[16:01:00] calibre-web: readback — listed=True download_link=True book_content_served=True
[16:01:00] RESULT (seed reads back AFTER): True
[16:01:00] files_may_change: the bind-mounted tree changed under ['/srv/felhom-gate/hdd/userdata/media/books']
[16:01:00] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8083
[16:01:15] + 15s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=296
[16:01:31] + 30s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=592
[16:01:46] + 45s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=884
[16:02:01] + 60s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=1180
[16:02:16] + 76s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=1474
[16:02:31] + 91s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=1768
[16:02:46] + 106s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2064
[16:03:01] + 121s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2356
[16:03:16] + 136s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2652
[16:03:31] + 151s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=2944
[16:03:47] + 166s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=3238
[16:04:02] + 181s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=3534
[16:04:17] + 196s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=3826
[16:04:32] + 212s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=4122
[16:04:47] + 227s calibre-web=237M/768M peak=299M kills=0 rs=0 reqs=4418
[16:05:02] + 242s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=4710
[16:05:17] + 257s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5006
[16:05:32] + 272s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5302
[16:05:48] + 287s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5594
[16:06:03] + 302s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=5890
[16:06:18] + 318s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=6182
[16:06:33] + 333s calibre-web=236M/768M peak=299M kills=0 rs=0 reqs=6478
[16:06:48] + 348s calibre-web=205M/768M peak=299M kills=0 rs=0 reqs=6774
[16:07:03] + 363s calibre-web=193M/768M peak=299M kills=0 rs=0 reqs=7070
[16:07:18] + 378s calibre-web=192M/768M peak=299M kills=0 rs=0 reqs=7362
[16:07:33] + 393s calibre-web=191M/768M peak=299M kills=0 rs=0 reqs=7658
[16:07:49] + 408s calibre-web=191M/768M peak=299M kills=0 rs=0 reqs=7952
[16:08:04] + 423s calibre-web=184M/768M peak=299M kills=0 rs=0 reqs=8246
[16:08:19] + 438s calibre-web=179M/768M peak=299M kills=0 rs=0 reqs=8541
[16:08:34] + 454s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=8834
[16:08:49] + 469s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=9130
[16:09:04] + 484s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=9422
[16:09:19] + 499s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=9718
[16:09:34] + 514s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=10014
[16:09:49] + 529s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=10306
[16:10:05] + 544s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=10602
[16:10:20] + 559s calibre-web=180M/768M peak=299M kills=0 rs=0 reqs=10894
[16:10:35] + 575s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=11190
[16:10:50] + 590s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=11486
[16:11:05] + 605s calibre-web=181M/768M peak=299M kills=0 rs=0 reqs=11778
[16:11:05] memory watch: killed=False tight=[] requests=11778 codes={'302': 11778}
[16:11:05] MV-calibre-web: ABORT — putting the FROM images back
[16:11:42] calibre-web: readback — listed=True download_link=True book_content_served=True
[16:11:42] ABORT: app came back in 30.8s; data present=True
@@ -0,0 +1,189 @@
calibre-web | [migrations] started
calibre-web | [migrations] no migrations found
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | ,gggg, ,ggg, gg ,gg
calibre-web | ,88"""Y8b, ,dPYb, ,dPYb, dP""Y8a 88 ,8P ,dPYb,
calibre-web | d8" `Y8 IP'`Yb IP'`Yb Yb, `88 88 d8' IP'`Yb
calibre-web | d8' 8b d8 I8 8I gg I8 8I `" 88 88 88 I8 8I
calibre-web | ,8I "Y88P' I8 8' "" I8 8' 88 88 88 I8 8'
calibre-web | I8' ,gggg,gg I8 dP gg I8 dP ,gggggg, ,ggg, aaaaaaaa 88 88 88 ,ggg, I8 dP
calibre-web | d8 dP" "Y8I I8dP 88 I8dP 88gg dP""""8I i8" "8i """""""" 88 88 88 i8" "8i I8dP 88gg
calibre-web | Y8, i8' ,8I I8P 88 I8P 8I ,8' 8I I8, ,8I Y8 ,88, 8P I8, ,8I I8P 8I
calibre-web | `Yba,,_____, ,d8, ,d8b,,d8b,_ _,88,_,d8b, ,8I ,dP Y8, `YbadP' Yb,,d8""8b,,dP `YbadP' ,d8b, ,8I
calibre-web | `"Y8888888 P"Y8888P"`Y88P'"Y888P""Y88P'"Y88P"' 8P `Y8888P"Y888 "88" "88" 888P"Y8888P'"Y88P"'
calibre-web |
calibre-web |
calibre-web | █████╗ ██╗ ██╗████████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗██████╗
calibre-web | ██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝██╔══██╗
calibre-web | ███████║██║ ██║ ██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ██║ ██║
calibre-web | ██╔══██║██║ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ██║ ██║
calibre-web | ██║ ██║╚██████╔╝ ██║ ╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗██████╔╝
calibre-web | ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝
calibre-web |
calibre-web |
calibre-web | ~~~ Based on docker-calibre-web from linuxserver.io & Calibre-Web by janeczku ~~~
calibre-web |
calibre-web | ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
calibre-web |
calibre-web | To support the app dev(s) visit:
calibre-web | Calibre-Web Automated: https://ko-fi.com/crocodilestick/tip
calibre-web | To support LSIO projects visit:
calibre-web | https://www.linuxserver.io/donate/
calibre-web |
calibre-web | ───────────────────────────────────────
calibre-web | GID/UID
calibre-web | ───────────────────────────────────────
calibre-web |
calibre-web | User UID: 1000
calibre-web | User GID: 1000
calibre-web | ───────────────────────────────────────
calibre-web | [cwa-init] Starting CWA initialization process...
calibre-web | [cwa-init] Verifying essential directories...
calibre-web | [cwa-init] Directory /app/calibre-web-automated verified
calibre-web | [cwa-init] Directory /config verified
calibre-web | [cwa-init] Directory /calibre-library verified
calibre-web | [cwa-init] Directory /app/calibre verified
calibre-web | [cwa-init] Verifying essential files...
calibre-web | [cwa-init] File /app/CWA_RELEASE verified
calibre-web | [cwa-init] File /CALIBRE_RELEASE verified
calibre-web | [cwa-init] Environment verification complete
calibre-web | [cwa-init] Setting up ImageMagick policy...
calibre-web | [cwa-init] Checking for leftover lock files from previous instance...
calibre-web | [cwa-init] No leftover lock files to remove. Ending service...
calibre-web | [cwa-init] Checking for an existing app.db in /config...
calibre-web | [cwa-init] Existing app.db found!
calibre-web | [cwa-init] Setting binary paths in '/config/app.db' to the correct ones...
calibre-web | [cwa-init] Successfully set binary paths in '/config/app.db'!
calibre-web | [cwa-init] Enforcing dark theme in app.db (one-time migration)...
calibre-web | [cwa-init] Dark theme enforcement completed.
calibre-web | [cwa-init] CWA-init complete! Service exiting now...
calibre-web | [cwa-init] Existing user_profiles.json found!
calibre-web | [cwa-init] Preparing to set ownership of everything in /config, /app/calibre-web-automated, /calibre-library, /cwa-book-ingest, /calibre-library, /config/.cwa_conversion_tmp to abc:abc...
calibre-web | [cwa-init] Successfully set permissions for '/config'!
calibre-web | [cwa-init] Successfully set permissions for '/app/calibre-web-automated'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/cwa-book-ingest'!
calibre-web | [cwa-init] Successfully set permissions for '/calibre-library'!
calibre-web | [cwa-init] Successfully set permissions for '/config/.cwa_conversion_tmp'!
calibre-web | [cwa-init][qt6] Starting Qt6 compatibility check...
calibre-web | [cwa-init][qt6] Host kernel 7.0.2-6-pve >= 6.0: leaving Qt6 libs intact for full functionality. (PDF/WebEngine features enabled)
calibre-web | [cwa-init][qt6] Qt6 compatibility check completed.
calibre-web | [cwa-init] Resolving CWA versions (installed + latest stable) ...
calibre-web | [cwa-init] Installed version: v4.0.8
calibre-web | [cwa-init] Attempting to fetch latest stable version from GitHub...
calibre-web | [cwa-init] Using jq for JSON parsing...
calibre-web | [cwa-init] Successfully fetched stable version via jq: v4.0.8
calibre-web | [cwa-init] Valid stable version retrieved: v4.0.8
calibre-web | [cwa-init] Stable version persisted to /app/CWA_STABLE_RELEASE
calibre-web | [cwa-init] Versions resolved: INSTALLED=v4.0.8, STABLE=v4.0.8
calibre-web | [cwa-process-recovery] Starting process recovery and cleanup...
calibre-web | [calibre-binaries-setup] Starting Calibre binaries setup...
calibre-web | [calibre-binaries-setup] Checking if Calibre is already installed...
calibre-web | [cwa-auto-zipper] Starting CWA-Auto-Zipper service...
calibre-web | [cwa-auto-zipper] Matching internal localtime & timezone with the one provided...
calibre-web | [cwa-process-recovery] ========== Starting Recovery Sequence ==========
calibre-web | [cwa-process-recovery] Cleaning up stale temporary files...
calibre-web | [calibre-binaries-setup] Calibre version check timed out or failed, assuming not installed
calibre-web | [calibre-binaries-setup] USER NOTE: 'Ignore calibredb: command not found' above, nothing is wrong, this just indicates to CWA that Calibre still needs to be installed
calibre-web | [calibre-binaries-setup] Installing Calibre version 9.1.0...
calibre-web | [calibre-binaries-setup] This may take several minutes, please wait...
calibre-web | [cwa-auto-zipper] Zoneinfo for Europe/Budapest found. Setting /etc/localtime and /etc/timezone to match...
calibre-web | [cwa-auto-zipper] Timezone & Localtime successfully set to Europe/Budapest. Initiating Auto-Zipper ...
calibre-web | [cwa-process-recovery] Cleaned up 6 stale temporary file(s)
calibre-web | [cwa-process-recovery] Checking processing status...
calibre-web | [cwa-auto-zipper] Next run in 21508 seconds.
calibre-web | [cwa-process-recovery] Processing status is: idle
calibre-web | [custom-init] No custom files found, skipping...
calibre-web | [cwa-process-recovery] Checking for orphaned CWA processes...
calibre-web | [cwa-process-recovery] No orphaned CWA processes found
calibre-web | [cwa-process-recovery] ========== Recovery Sequence Complete ==========
calibre-web | [cwa-process-recovery] Process recovery service finished successfully
calibre-web | [cwa-auto-library]: Existing library found at /calibre-library, mounting now...
calibre-web | [cwa-auto-library] Updating dirs.json with new library location...
calibre-web | [cwa-auto-library]: Updating Settings Database with library location...
calibre-web | [cwa-auto-library] Library location successfully set to: /calibre-library
calibre-web | [cwa-auto-library] Service completed successfully! Ending service...
calibre-web | xdg-desktop-menu: No writable system menu directory found.
calibre-web | Creating symlinks...
calibre-web | Symlinking /app/calibre/ebook-device to /usr/bin/ebook-device
calibre-web | Symlinking /app/calibre/ebook-meta to /usr/bin/ebook-meta
calibre-web | Symlinking /app/calibre/ebook-convert to /usr/bin/ebook-convert
calibre-web | Symlinking /app/calibre/ebook-polish to /usr/bin/ebook-polish
calibre-web | Symlinking /app/calibre/markdown-calibre to /usr/bin/markdown-calibre
calibre-web | Symlinking /app/calibre/web2disk to /usr/bin/web2disk
calibre-web | Symlinking /app/calibre/calibre-server to /usr/bin/calibre-server
calibre-web | Symlinking /app/calibre/lrf2lrs to /usr/bin/lrf2lrs
calibre-web | Symlinking /app/calibre/lrs2lrf to /usr/bin/lrs2lrf
calibre-web | Symlinking /app/calibre/calibre-debug to /usr/bin/calibre-debug
calibre-web | Symlinking /app/calibre/calibredb to /usr/bin/calibredb
calibre-web | Symlinking /app/calibre/calibre-parallel to /usr/bin/calibre-parallel
calibre-web | Symlinking /app/calibre/calibre-customize to /usr/bin/calibre-customize
calibre-web | Symlinking /app/calibre/fetch-ebook-metadata to /usr/bin/fetch-ebook-metadata
calibre-web | Symlinking /app/calibre/calibre-smtp to /usr/bin/calibre-smtp
calibre-web | Symlinking /app/calibre/calibre to /usr/bin/calibre
calibre-web | Symlinking /app/calibre/lrfviewer to /usr/bin/lrfviewer
calibre-web | Symlinking /app/calibre/ebook-viewer to /usr/bin/ebook-viewer
calibre-web | Symlinking /app/calibre/ebook-edit to /usr/bin/ebook-edit
calibre-web | Setting up command-line completion...
calibre-web | Installing zsh completion to: /usr/share/zsh/vendor-completions/_calibre
calibre-web | Failed to find directory to install bash completions, using default.
calibre-web | Installing bash completion to: /usr/share/bash-completion/completions/
calibre-web | Setting up desktop integration...
calibre-web |
calibre-web | ____________________ WARNING ____________________
calibre-web | Setting up desktop integration failed with error:
calibre-web | __________________________________________________
calibre-web |
calibre-web |
calibre-web | Traceback (most recent call last):
calibre-web | File "calibre/linux.py", line 858, in setup_desktop_integration
calibre-web | File "calibre/linux.py", line 880, in do_setup_desktop_integration
calibre-web | File "calibre/linux.py", line 960, in install_xdg_junk
calibre-web | File "subprocess.py", line 419, in check_call
calibre-web | subprocess.CalledProcessError: Command 'xdg-desktop-menu install --noupdate ./calibre-gui.desktop' returned non-zero exit status 3.
calibre-web |
calibre-web | Creating un-installer: /usr/bin/calibre-uninstall
calibre-web |
calibre-web |
calibre-web | There were 1 warnings
calibre-web |
calibre-web | * Setting up desktop integration failed with error:
calibre-web |
calibre-web | [calibre-binaries-setup] Calibre setup completed successfully!
calibre-web | [calibre-binaries-setup] Installation verified: calibredb (calibre 9.1)
calibre-web | [calibre-binaries-setup] Service completed successfully, exiting...
calibre-web | [2026-09-30 18:00:37,484] INFO {cps:93} ProxyFix configured to trust 1 proxy(ies) for X-Forwarded-* headers
calibre-web | [2026-09-30 18:00:37,594] INFO {cps.ub:1144} Migrating system magic shelves...
calibre-web | [2026-09-30 18:00:37,611] INFO {cps.magic_shelf:790} Created system magic shelf 'Currently Reading' for user 1
calibre-web | [2026-09-30 18:00:37,617] INFO {cps.magic_shelf:800} Successfully created 1 system magic shelves for user 1
calibre-web | [2026-09-30 18:00:37,618] INFO {cps.ub:1197} System shelf migration complete: 0 old shelves removed, 1 new shelves created
calibre-web | [2026-09-30 18:00:37,712] INFO {cps:141} SESSION_COOKIE_SECURE set to False (Standard/LDAP login)
calibre-web | [2026-09-30 18:00:37,752] INFO {cps:198} Starting Calibre Web...
calibre-web | [2026-09-30 18:00:38,274] INFO {cps:218} OAuth blueprints initialized successfully
calibre-web | [2026-09-30 18:00:38,302] WARN {py.warnings:110} /lsiopy/lib/python3.13/site-packages/flask_limiter/extension.py:324: UserWarning: Using the in-memory storage for tracking rate limits as no storage was explicitly specified. This is not recommended for production use. See: https://flask-limiter.readthedocs.io#configuring-a-storage-backend for documentation about configuring the storage backend.
calibre-web | warnings.warn(
calibre-web |
calibre-web | [2026-09-30 18:00:38,588] INFO {apscheduler.scheduler:214} Scheduler started
calibre-web | [2026-09-30 18:00:38,589] INFO {apscheduler.scheduler:1092} Added job "delete temp" to job store "default"
calibre-web | [2026-09-30 18:00:38,589] INFO {apscheduler.scheduler:1092} Added job "delete superfluous book covers" to job store "default"
calibre-web | [2026-09-30 18:00:38,589] INFO {apscheduler.scheduler:1092} Added job "generate book covers" to job store "default"
calibre-web | [2026-09-30 18:00:39,351] INFO {apscheduler.scheduler:1092} Added job "end scheduled task" to job store "default"
calibre-web | [2026-09-30 18:00:39,357] INFO {apscheduler.scheduler:1092} Added job "clean archived book references" to job store "default"
calibre-web | [2026-09-30 18:00:39,359] INFO {cps.tasks.thumbnail_migration:87} Thumbnail migration: No old subdirectories found, skipping migration
calibre-web | [2026-09-30 18:00:39,382] INFO {apscheduler.scheduler:1092} Added job "immediately delete temp" to job store "default"
calibre-web | [2026-09-30 18:00:39,383] INFO {apscheduler.executors.default:129} Running job "immediately delete temp (trigger: date[2026-09-30 18:00:39 CEST], next run at: 2026-09-30 18:00:39 CEST)" (scheduled at 2026-09-30 18:00:39.382656+02:00)
calibre-web | [2026-09-30 18:00:39,383] INFO {apscheduler.scheduler:728} Removed job a947a9c34e0e4997b2116dbc91a8c1da
calibre-web | [2026-09-30 18:00:39,405] INFO {apscheduler.executors.default:156} Job "immediately delete temp (trigger: date[2026-09-30 18:00:39 CEST], next run at: 2026-09-30 18:00:39 CEST)" executed successfully
calibre-web | [2026-09-30 18:00:40,120] INFO {cps.remotelogin:32} Magic Link QRCode is enabled
calibre-web | [2026-09-30 18:00:40,357] INFO {cps.server:207} Starting Gevent server on [::]:8083
calibre-web | Connection to localhost (::1) 8083 port [tcp/*] succeeded!
calibre-web | [cwa-checksum-backfill] Waiting for CWA service to be ready...
calibre-web | ========== STARTING METADATA CHANGE DETECTOR ===========
calibre-web | [metadata-change-detector] Watching folder: /app/calibre-web-automated/metadata_change_logs
calibre-web | ========== STARTING CWA-INGEST SERVICE ==========
calibre-web | Setting up watches.
calibre-web | Watches established.
calibre-web | [cwa-ingest-service] Watching folder: /cwa-book-ingest
calibre-web | Setting up watches. Beware: since -r was given, this may take a while!
calibre-web | Watches established.
@@ -0,0 +1,8 @@
{
"calibre-web": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,57 @@
{
"harness_version": 4,
"edge": "MV-calibre-web",
"app": "calibre-web",
"note": "night 2026-09-23 within-a-major move: calibre-web=crocodilestick/calibre-web-automated:v4.0.8",
"from": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.6"
},
"to": {
"calibre-web": "crocodilestick/calibre-web-automated:v4.0.8"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kcalibre-web | [migrations] started",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": {
"soak_s": 605.0,
"requested_s": 600,
"requests": 11778,
"codes": {
"302": 11778
},
"first_kill": null,
"containers": {
"calibre-web": {
"limit": 805306368,
"peak": 313589760,
"peak_pct": 0.389,
"anon_peak_sampled": 155197440,
"anon_peak_pct": 0.193,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [
"files_may_change"
],
"duration_s": 30.8,
"measured_at": "2026-09-30T16:11:42Z",
"evidence": "evidence/MV-calibre-web",
"scratch_cleared": [
"/srv/felhom-gate/import/calibre"
],
"files_changed": [
"/srv/felhom-gate/hdd/userdata/media/books"
],
"total_s": 751.9
}
@@ -0,0 +1,109 @@
[16:25:23] scratch drive folders cleared before FROM (R-656): none existed
[16:25:23] MV-crafty-controller: deploying crafty-controller at FROM {'crafty-controller': 'registry.gitlab.com/crafty-controller/crafty-4:4.10.7'}
[16:25:54] FROM settled=True in 30.8s :: {"crafty-controller": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[16:25:54] fixture: the BOX walk's own (Crafty), through upgrade_boxport
[16:25:54] crafty: POST /api/v2/roles http=200 {"status":"ok","data":{"role_id":1}}
[16:25:55] crafty: readback of the seeded role http=200 found=True (roles listed: 1)
[16:25:55] C1 (seed reads back BEFORE): True
[16:25:55] MV-crafty-controller: swapping to TO {'crafty-controller': 'registry.gitlab.com/crafty-controller/crafty-4:4.11.0'}
[16:26:46] TO up -d rc=0
[16:27:17] TO settled=True in 30.8s :: {"crafty-controller": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[16:27:17] migration lines observed: 1
[16:27:17] crafty: readback of the seeded role http=200 found=True (roles listed: 1)
[16:27:17] RESULT (seed reads back AFTER): True
[16:27:17] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8443
[16:27:32] + 15s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=236
[16:27:48] + 30s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=476
[16:28:03] + 45s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=716
[16:28:18] + 60s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=956
[16:28:33] + 76s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=1196
[16:28:48] + 91s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=1436
[16:29:03] + 106s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=1676
[16:29:18] + 121s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=1920
[16:29:33] + 136s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=2160
[16:29:49] + 151s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=2400
[16:30:04] + 166s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=2640
[16:30:19] + 182s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=2880
[16:30:34] + 197s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=3120
[16:30:49] + 212s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=3360
[16:31:04] + 227s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=3600
[16:31:19] + 242s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=3840
[16:31:34] + 257s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4084
[16:31:50] + 272s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4324
[16:32:05] + 287s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4564
[16:32:20] + 302s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4804
[16:32:35] + 318s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=5044
[16:32:50] + 333s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=5284
[16:33:05] + 348s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=5528
[16:33:20] + 363s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=5768
[16:33:35] + 378s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6008
[16:33:51] + 393s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6252
[16:34:06] + 408s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6492
[16:34:21] + 423s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6732
[16:34:36] + 439s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6972
[16:34:51] + 454s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7212
[16:35:06] + 469s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7452
[16:35:21] + 484s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7696
[16:35:36] + 499s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7936
[16:35:51] + 514s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8172
[16:36:07] + 529s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8416
[16:36:22] + 544s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8656
[16:36:37] + 560s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8896
[16:36:52] + 575s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=9136
[16:37:07] + 590s crafty-controller=103M/2048M peak=164M kills=0 rs=0 reqs=9376
[16:37:22] + 605s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=9620
[16:37:22] memory watch: killed=False tight=[] requests=9620 codes={'302': 9620}
[16:37:22] MV-crafty-controller: ABORT — putting the FROM images back
[16:37:55] crafty: readback of the seeded role http=200 found=True (roles listed: 1)
[16:37:55] ABORT: app came back in 30.8s; data present=True
{
"harness_version": 4,
"edge": "MV-crafty-controller",
"app": "crafty-controller",
"note": "night 2026-09-23 within-a-major move: crafty-controller=registry.gitlab.com/crafty-controller/crafty-4:4.11.0",
"from": {
"crafty-controller": "registry.gitlab.com/crafty-controller/crafty-4:4.10.7"
},
"to": {
"crafty-controller": "registry.gitlab.com/crafty-controller/crafty-4:4.11.0"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kcrafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO:\tStarting migrations",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": {
"soak_s": 605.2,
"requested_s": 600,
"requests": 9620,
"codes": {
"302": 9620
},
"first_kill": null,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"peak": 172363776,
"peak_pct": 0.08,
"anon_peak_sampled": 56918016,
"anon_peak_pct": 0.027,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [],
"duration_s": 30.8,
"measured_at": "2026-09-30T16:37:55Z",
"evidence": "evidence/MV-crafty-controller",
"scratch_cleared": [],
"files_changed": [],
"total_s": 752.7
}
@@ -0,0 +1,8 @@
{
"crafty-controller": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,40 @@
crafty-controller | Wrapper | 🚂✅ SteamCMD dependencies are available in this image!
crafty-controller | Wrapper | 🚀 Launching crafty with [-d -i]
crafty-controller | Logging set to: 0
crafty-controller |
crafty-controller | ///////////////////////////////////////////////////////////////////////////
crafty-controller | # Welcome to Crafty Controller - v.4.10.7 #
crafty-controller | ///////////////////////////////////////////////////////////////////////////
crafty-controller | # Server Manager / Web Portal for your Minecraft server #
crafty-controller | # Homepage: www.craftycontrol.com #
crafty-controller | ///////////////////////////////////////////////////////////////////////////
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Starting migrations
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: There is nothing to migrate
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Checking for reset secret flag
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: No flag found. Secrets are staying
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Checking for remote changes to config.json
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Remote change complete.
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Initializing all servers defined
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Crafty started in daemon mode, no shell will be printed
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Setting up Crafty's internal components...
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: https://172.18.0.2:8443 is up and ready for connections.
crafty-controller | [+] Crafty: 09/30/26 18:37:25 - INFO: Server Init Complete: Listening For Connections!
crafty-controller | [+] Crafty: 09/30/26 18:37:27 - INFO: Stats collection frequency set to 30 seconds
crafty-controller | [+] Crafty: 09/30/26 18:37:28 - INFO: Launching Scheduler Thread...
crafty-controller | [+] Crafty: 09/30/26 18:37:28 - INFO: Launching command thread...
crafty-controller | [+] Crafty: 09/30/26 18:37:28 - INFO: Launching log watcher...
crafty-controller | [+] Crafty: 09/30/26 18:37:28 - INFO: Launching realtime thread...
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:37:29 - INFO: Checking Internet. This may take a minute.
crafty-controller | [+] Crafty: 09/30/26 18:37:31 - INFO: Execution Mode: Non-interactive (e.g. 'python main.py')
crafty-controller | [+] Crafty: 09/30/26 18:37:31 - INFO: Application path: '/crafty'
crafty-controller |
crafty-controller | A new version of Crafty is available!
crafty-controller | /////////////////////////////////////
crafty-controller | New version available: 4.11.0
crafty-controller | Current version: 4.10.7
crafty-controller | /////////////////////////////////////
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:37:32 - INFO: Crafty has fully started and is now ready for use!
@@ -0,0 +1,682 @@
[
{
"t": 15.1,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105312256,
"peak": 172363776,
"anon": 56700928,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 236
},
{
"t": 30.2,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105357312,
"peak": 172363776,
"anon": 56729600,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 476
},
{
"t": 45.4,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105492480,
"peak": 172363776,
"anon": 56778752,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 716
},
{
"t": 60.5,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105582592,
"peak": 172363776,
"anon": 56827904,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 956
},
{
"t": 75.6,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 104898560,
"peak": 172363776,
"anon": 56848384,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1196
},
{
"t": 90.7,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106020864,
"peak": 172363776,
"anon": 56877056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1436
},
{
"t": 105.9,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105840640,
"peak": 172363776,
"anon": 56877056,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1676
},
{
"t": 121.0,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105611264,
"peak": 172363776,
"anon": 56885248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1920
},
{
"t": 136.1,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105947136,
"peak": 172363776,
"anon": 56885248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2160
},
{
"t": 151.2,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105480192,
"peak": 172363776,
"anon": 56885248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2400
},
{
"t": 166.3,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105287680,
"peak": 172363776,
"anon": 56885248,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2640
},
{
"t": 181.5,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106373120,
"peak": 172363776,
"anon": 56901632,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2880
},
{
"t": 196.6,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106201088,
"peak": 172363776,
"anon": 56909824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3120
},
{
"t": 211.7,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 105754624,
"peak": 172363776,
"anon": 56909824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3360
},
{
"t": 226.8,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106061824,
"peak": 172363776,
"anon": 56909824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3600
},
{
"t": 241.9,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106090496,
"peak": 172363776,
"anon": 56909824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3840
},
{
"t": 257.1,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106430464,
"peak": 172363776,
"anon": 56909824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4084
},
{
"t": 272.2,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106471424,
"peak": 172363776,
"anon": 56909824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4324
},
{
"t": 287.3,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106389504,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4564
},
{
"t": 302.4,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106688512,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4804
},
{
"t": 317.6,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106598400,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5044
},
{
"t": 332.7,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107180032,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5284
},
{
"t": 347.8,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 106786816,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5528
},
{
"t": 362.9,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107282432,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5768
},
{
"t": 378.1,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107274240,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6008
},
{
"t": 393.2,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107290624,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6252
},
{
"t": 408.3,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107085824,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6492
},
{
"t": 423.4,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107388928,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6732
},
{
"t": 438.6,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107462656,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6972
},
{
"t": 453.7,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107040768,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7212
},
{
"t": 468.8,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107601920,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7452
},
{
"t": 483.9,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107421696,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7696
},
{
"t": 499.0,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107712512,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7936
},
{
"t": 514.2,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107483136,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8172
},
{
"t": 529.3,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107814912,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8416
},
{
"t": 544.4,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107880448,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8656
},
{
"t": 559.5,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107663360,
"peak": 172363776,
"anon": 56913920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8896
},
{
"t": 574.6,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107483136,
"peak": 172363776,
"anon": 56918016,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9136
},
{
"t": 589.8,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 108068864,
"peak": 172363776,
"anon": 56918016,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9376
},
{
"t": 604.9,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"current": 107638784,
"peak": 172363776,
"anon": 56918016,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9620
}
]
@@ -0,0 +1 @@
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Starting migrations
@@ -0,0 +1,58 @@
[16:25:23] scratch drive folders cleared before FROM (R-656): none existed
[16:25:23] MV-crafty-controller: deploying crafty-controller at FROM {'crafty-controller': 'registry.gitlab.com/crafty-controller/crafty-4:4.10.7'}
[16:25:54] FROM settled=True in 30.8s :: {"crafty-controller": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[16:25:54] fixture: the BOX walk's own (Crafty), through upgrade_boxport
[16:25:54] crafty: POST /api/v2/roles http=200 {"status":"ok","data":{"role_id":1}}
[16:25:55] crafty: readback of the seeded role http=200 found=True (roles listed: 1)
[16:25:55] C1 (seed reads back BEFORE): True
[16:25:55] MV-crafty-controller: swapping to TO {'crafty-controller': 'registry.gitlab.com/crafty-controller/crafty-4:4.11.0'}
[16:26:46] TO up -d rc=0
[16:27:17] TO settled=True in 30.8s :: {"crafty-controller": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[16:27:17] migration lines observed: 1
[16:27:17] crafty: readback of the seeded role http=200 found=True (roles listed: 1)
[16:27:17] RESULT (seed reads back AFTER): True
[16:27:17] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8443
[16:27:32] + 15s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=236
[16:27:48] + 30s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=476
[16:28:03] + 45s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=716
[16:28:18] + 60s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=956
[16:28:33] + 76s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=1196
[16:28:48] + 91s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=1436
[16:29:03] + 106s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=1676
[16:29:18] + 121s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=1920
[16:29:33] + 136s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=2160
[16:29:49] + 151s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=2400
[16:30:04] + 166s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=2640
[16:30:19] + 182s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=2880
[16:30:34] + 197s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=3120
[16:30:49] + 212s crafty-controller=100M/2048M peak=164M kills=0 rs=0 reqs=3360
[16:31:04] + 227s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=3600
[16:31:19] + 242s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=3840
[16:31:34] + 257s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4084
[16:31:50] + 272s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4324
[16:32:05] + 287s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4564
[16:32:20] + 302s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=4804
[16:32:35] + 318s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=5044
[16:32:50] + 333s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=5284
[16:33:05] + 348s crafty-controller=101M/2048M peak=164M kills=0 rs=0 reqs=5528
[16:33:20] + 363s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=5768
[16:33:35] + 378s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6008
[16:33:51] + 393s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6252
[16:34:06] + 408s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6492
[16:34:21] + 423s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6732
[16:34:36] + 439s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=6972
[16:34:51] + 454s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7212
[16:35:06] + 469s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7452
[16:35:21] + 484s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7696
[16:35:36] + 499s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=7936
[16:35:51] + 514s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8172
[16:36:07] + 529s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8416
[16:36:22] + 544s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8656
[16:36:37] + 560s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=8896
[16:36:52] + 575s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=9136
[16:37:07] + 590s crafty-controller=103M/2048M peak=164M kills=0 rs=0 reqs=9376
[16:37:22] + 605s crafty-controller=102M/2048M peak=164M kills=0 rs=0 reqs=9620
[16:37:22] memory watch: killed=False tight=[] requests=9620 codes={'302': 9620}
[16:37:22] MV-crafty-controller: ABORT — putting the FROM images back
[16:37:55] crafty: readback of the seeded role http=200 found=True (roles listed: 1)
[16:37:55] ABORT: app came back in 30.8s; data present=True
@@ -0,0 +1,32 @@
crafty-controller | Wrapper | 🚂✅ SteamCMD dependencies are available in this image!
crafty-controller | Wrapper | 🚀 Launching crafty with [-d -i]
crafty-controller | Logging set to: 0
crafty-controller |
crafty-controller | ///////////////////////////////////////////////////////////////////////////
crafty-controller | # Welcome to Crafty Controller - v.4.11.0 #
crafty-controller | ///////////////////////////////////////////////////////////////////////////
crafty-controller | # Server Manager / Web Portal for your Minecraft server #
crafty-controller | # Homepage: www.craftycontrol.com #
crafty-controller | ///////////////////////////////////////////////////////////////////////////
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Starting migrations
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Checking for reset secret flag
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: No flag found. Secrets are staying
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Checking for remote changes to config.json
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Remote change complete.
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Initializing all servers defined
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Crafty started in daemon mode, no shell will be printed
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Setting up Crafty's internal components...
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: https://172.18.0.2:8443 is up and ready for connections.
crafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO: Server Init Complete: Listening For Connections!
crafty-controller | [+] Crafty: 09/30/26 18:26:49 - INFO: Stats collection frequency set to 30 seconds
crafty-controller | [+] Crafty: 09/30/26 18:26:50 - INFO: Launching Scheduler Thread...
crafty-controller | [+] Crafty: 09/30/26 18:26:50 - INFO: Launching command thread...
crafty-controller | [+] Crafty: 09/30/26 18:26:50 - INFO: Launching log watcher...
crafty-controller | [+] Crafty: 09/30/26 18:26:50 - INFO: Launching realtime thread...
crafty-controller |
crafty-controller | [+] Crafty: 09/30/26 18:26:51 - INFO: Checking Internet. This may take a minute.
crafty-controller | [+] Crafty: 09/30/26 18:26:53 - INFO: Execution Mode: Non-interactive (e.g. 'python main.py')
crafty-controller | [+] Crafty: 09/30/26 18:26:53 - INFO: Application path: '/crafty'
crafty-controller | [+] Crafty: 09/30/26 18:26:54 - INFO: Crafty has fully started and is now ready for use!
@@ -0,0 +1,8 @@
{
"crafty-controller": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,51 @@
{
"harness_version": 4,
"edge": "MV-crafty-controller",
"app": "crafty-controller",
"note": "night 2026-09-23 within-a-major move: crafty-controller=registry.gitlab.com/crafty-controller/crafty-4:4.11.0",
"from": {
"crafty-controller": "registry.gitlab.com/crafty-controller/crafty-4:4.10.7"
},
"to": {
"crafty-controller": "registry.gitlab.com/crafty-controller/crafty-4:4.11.0"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kcrafty-controller | [+] Crafty: 09/30/26 18:26:47 - INFO:\tStarting migrations",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": {
"soak_s": 605.2,
"requested_s": 600,
"requests": 9620,
"codes": {
"302": 9620
},
"first_kill": null,
"containers": {
"crafty-controller": {
"limit": 2147483648,
"peak": 172363776,
"peak_pct": 0.08,
"anon_peak_sampled": 56918016,
"anon_peak_pct": 0.027,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [],
"duration_s": 30.8,
"measured_at": "2026-09-30T16:37:55Z",
"evidence": "evidence/MV-crafty-controller",
"scratch_cleared": [],
"files_changed": [],
"total_s": 752.7
}
@@ -0,0 +1,111 @@
[15:16:39] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/hdd/userdata/media']
[15:16:39] MV-emby: deploying emby at FROM {'emby': 'emby/embyserver:4.11.0.3'}
[15:17:29] FROM settled=True in 30.8s :: {"emby": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:17:29] fixture: the BOX walk's own (Emby), through upgrade_boxport
[15:17:29] emby: seeded first user drillde12c4fd
[15:17:29] emby: readback found=True (http 200, control passed)
[15:17:29] C1 (seed reads back BEFORE): True
[15:17:29] MV-emby: swapping to TO {'emby': 'emby/embyserver:4.11.0.4'}
[15:17:49] TO up -d rc=0
[15:18:20] TO settled=True in 30.8s :: {"emby": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:18:20] migration lines observed: 3
[15:18:20] emby: readback found=True (http 200, control passed)
[15:18:20] RESULT (seed reads back AFTER): True
[15:18:21] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8096
[15:18:36] + 15s emby=148M/2048M peak=150M kills=0 rs=0 reqs=300
[15:18:51] + 30s emby=146M/2048M peak=150M kills=0 rs=0 reqs=600
[15:19:06] + 45s emby=147M/2048M peak=150M kills=0 rs=0 reqs=900
[15:19:21] + 60s emby=147M/2048M peak=150M kills=0 rs=0 reqs=1200
[15:19:36] + 76s emby=146M/2048M peak=150M kills=0 rs=0 reqs=1500
[15:19:51] + 91s emby=146M/2048M peak=150M kills=0 rs=0 reqs=1800
[15:20:06] + 106s emby=147M/2048M peak=150M kills=0 rs=0 reqs=2100
[15:20:22] + 121s emby=147M/2048M peak=150M kills=0 rs=0 reqs=2400
[15:20:37] + 136s emby=147M/2048M peak=150M kills=0 rs=0 reqs=2700
[15:20:52] + 151s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3001
[15:21:07] + 166s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3301
[15:21:22] + 181s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3601
[15:21:37] + 196s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3901
[15:21:52] + 212s emby=144M/2048M peak=150M kills=0 rs=0 reqs=4199
[15:22:07] + 227s emby=144M/2048M peak=150M kills=0 rs=0 reqs=4499
[15:22:23] + 242s emby=144M/2048M peak=150M kills=0 rs=0 reqs=4799
[15:22:38] + 257s emby=145M/2048M peak=150M kills=0 rs=0 reqs=5099
[15:22:53] + 272s emby=144M/2048M peak=150M kills=0 rs=0 reqs=5402
[15:23:08] + 287s emby=147M/2048M peak=150M kills=0 rs=0 reqs=5702
[15:23:23] + 302s emby=144M/2048M peak=150M kills=0 rs=0 reqs=6002
[15:23:38] + 318s emby=144M/2048M peak=150M kills=0 rs=0 reqs=6302
[15:23:53] + 333s emby=144M/2048M peak=150M kills=0 rs=0 reqs=6602
[15:24:08] + 348s emby=145M/2048M peak=150M kills=0 rs=0 reqs=6902
[15:24:24] + 363s emby=144M/2048M peak=150M kills=0 rs=0 reqs=7200
[15:24:39] + 378s emby=145M/2048M peak=150M kills=0 rs=0 reqs=7500
[15:24:54] + 393s emby=146M/2048M peak=150M kills=0 rs=0 reqs=7800
[15:25:09] + 408s emby=146M/2048M peak=150M kills=0 rs=0 reqs=8100
[15:25:24] + 423s emby=146M/2048M peak=150M kills=0 rs=0 reqs=8396
[15:25:39] + 438s emby=145M/2048M peak=150M kills=0 rs=0 reqs=8696
[15:25:54] + 454s emby=146M/2048M peak=150M kills=0 rs=0 reqs=8996
[15:26:09] + 469s emby=146M/2048M peak=150M kills=0 rs=0 reqs=9296
[15:26:24] + 484s emby=146M/2048M peak=150M kills=0 rs=0 reqs=9596
[15:26:40] + 499s emby=146M/2048M peak=150M kills=0 rs=0 reqs=9896
[15:26:55] + 514s emby=146M/2048M peak=150M kills=0 rs=0 reqs=10196
[15:27:10] + 529s emby=146M/2048M peak=150M kills=0 rs=0 reqs=10496
[15:27:25] + 544s emby=146M/2048M peak=150M kills=0 rs=0 reqs=10796
[15:27:40] + 559s emby=146M/2048M peak=150M kills=0 rs=0 reqs=11096
[15:27:55] + 574s emby=145M/2048M peak=150M kills=0 rs=0 reqs=11394
[15:28:10] + 590s emby=146M/2048M peak=150M kills=0 rs=0 reqs=11694
[15:28:25] + 605s emby=146M/2048M peak=150M kills=0 rs=0 reqs=11992
[15:28:26] memory watch: killed=False tight=[] requests=11992 codes={'302': 11992}
[15:28:26] MV-emby: ABORT — putting the FROM images back
[15:28:57] emby: readback found=True (http 200, control passed)
[15:28:57] ABORT: app came back in 30.8s; data present=True
{
"harness_version": 4,
"edge": "MV-emby",
"app": "emby",
"note": "night 2026-09-23 within-a-major move: emby=emby/embyserver:4.11.0.4",
"from": {
"emby": "emby/embyserver:4.11.0.3"
},
"to": {
"emby": "emby/embyserver:4.11.0.4"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kemby | Info SqliteUserRepository: Sqlite compiler options: ATOMIC_INTRINSICS=1,COMPILER=gcc-13.4.0,DEFAULT_AUTOVACUUM,DEFAULT_CACHE_SIZE=-2000,DEFAULT_FILE_FORMAT=4,DEFAULT_JOURNAL_SIZE_LIMIT=-1,DEFAULT_MMAP_SIZE=0,DEFAULT_PAGE_SIZE=4096,DEFAULT_PCACHE_INITSZ=20,DEFAULT_RECURSIVE_TRIGGERS,DEFAULT_SECTOR_SIZE=4096,DEFAULT_SYNCHRONOUS=2,DEFAULT_WAL_AUTOCHECKPOINT=1000,DEFAULT_WAL_SYNCHRONOUS=2,DEFAULT_WORKER_THREADS=0,DIRECT_OVERFLOW_READ,ENABLE_COLUMN_METADATA,ENABLE_FTS3_PARENTHESIS,ENABLE_FTS3_TOKENIZER,ENABLE_FTS5,ENABLE_MATH_FUNCTIONS,ENABLE_PERCENTILE,ENABLE_UPDATE_DELETE_LIMIT,LIKE_DOESNT_MATCH_BLOBS,MALLOC_SOFT_LIMIT=1024,MAX_ATTACHED=10,MAX_COLUMN=2000,MAX_COMPOUND_SELECT=500,MAX_DEFAULT_PAGE_SIZE=8192,MAX_EXPR_DEPTH=1000,MAX_FUNCTION_ARG=1000,MAX_LENGTH=1000000000,MAX_LIKE_PATTERN_LENGTH=50000,MAX_MMAP_SIZE=0x7fff0000,MAX_PAGE_COUNT=0xfffffffe,MAX_PAGE_SIZE=65536,MAX_SCHEMA_RETRY=25,MAX_SQL_LENGTH=1000000000,MAX_TRIGGER_DEPTH=1000,MAX_VARIABLE_NUMBER=250000,MAX_VDBE_OP=250000000,MAX_WORKER_THREADS=8,MUTEX_PTHREADS,OMIT_LOOKASIDE,OMIT_SHARED_CACHE,SYSTEM_MALLOC,TEMP_STORE=1,THREADSAFE=1",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": {
"soak_s": 604.9,
"requested_s": 600,
"requests": 11992,
"codes": {
"302": 11992
},
"first_kill": null,
"containers": {
"emby": {
"limit": 2147483648,
"peak": 157536256,
"peak_pct": 0.073,
"anon_peak_sampled": 101310464,
"anon_peak_pct": 0.047,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [],
"duration_s": 30.8,
"measured_at": "2026-09-30T15:28:57Z",
"evidence": "evidence/MV-emby",
"scratch_cleared": [
"/srv/felhom-gate/hdd/userdata/media"
],
"files_changed": [],
"total_s": 738.0
}
@@ -0,0 +1,8 @@
{
"emby": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,259 @@
emby | s6-rc: info: service s6rc-oneshot-runner: starting
emby | s6-rc: info: service s6rc-oneshot-runner successfully started
emby | s6-rc: info: service fix-attrs: starting
emby | s6-rc: info: service fix-attrs successfully started
emby | s6-rc: info: service legacy-cont-init: starting
emby | s6-rc: info: service legacy-cont-init successfully started
emby | s6-rc: info: service emby-server: starting
emby | s6-rc: info: service emby-server successfully started
emby | s6-rc: info: service legacy-services: starting
emby | s6-rc: info: service legacy-services successfully started
emby | Info Main: Application path: /system/EmbyServer.dll
emby | Info NetworkManager: Adding event handler for NetworkChange.NetworkAddressChanged
emby | Info App: Setting default culture to en-us
emby | Info Main: Emby Server 4.11.0.3
emby | Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
emby | Operating system: Linux version 7.0.2-6-pve (build@proxmox) (gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP PREEMPT_DYNAMIC PMX 7.0.2-6 (2
emby | OS/Process: x64/x64
emby | Framework: .NET 8.0.28
emby | Runtime: system/System.Private.CoreLib.dll
emby | Processor count: 6
emby | Data path: /config
emby | Application path: /system
emby | Info Main: Logs path: /config/logs
emby | Info Main: Cache path: /config/cache
emby | Info Main: Internal metadata path: /config/metadata
emby | Info Main: DefaultThreadCurrentCulture: en-US
emby | Info Main: DefaultThreadCurrentUICulture: en-US
emby | Info Main: DefaultThreadCurrentUICulture: en-US
emby | Info Main: Server Friendly Name: ‌0e007414cdff‌
emby | Info Main: Local time: 09/30/2026 17:28:27 +02:00
emby | Info App: Emby Server Version: 4.11.0.3
emby | Info App: Loading assemblies
emby | Info App: Updating pre-installed plugins due to server rollback. Last server version: 4.11.0.4. Current server version: 4.11.0.3
emby | Info App: Any manually installed plugins will need to be reverted to compatible versions. Please use the Emby plugin catalog to install compatible versions of your plugins.
emby | Info App: Why did you roll back your server version? If you did so because of a problem, please make sure to report it to the Emby team.
emby | Info App: Copying plugin from /system/plugins/Emby.M3UTuner.dll to /config/plugins/Emby.M3UTuner.dll
emby | Info App: Copying plugin from /system/plugins/Emby.Dlna.dll to /config/plugins/Emby.Dlna.dll
emby | Info App: Copying plugin from /system/plugins/MBBackup.dll to /config/plugins/MBBackup.dll
emby | Info App: Copying plugin from /system/plugins/Emby.Server.CinemaMode.dll to /config/plugins/Emby.Server.CinemaMode.dll
emby | Info App: Copying plugin from /system/plugins/Emby.PortMapper.dll to /config/plugins/Emby.PortMapper.dll
emby | Info App: Copying plugin from /system/plugins/AudioDb.dll to /config/plugins/AudioDb.dll
emby | Info App: Copying plugin from /system/plugins/DvdMounter.dll to /config/plugins/DvdMounter.dll
emby | Info App: Copying plugin from /system/plugins/Emby.XmlTV.dll to /config/plugins/Emby.XmlTV.dll
emby | Info App: Copying plugin from /system/plugins/MusicBrainz.dll to /config/plugins/MusicBrainz.dll
emby | Info App: Copying plugin from /system/plugins/OMDb.dll to /config/plugins/OMDb.dll
emby | Info App: Copying plugin from /system/plugins/Emby.Webhooks.dll to /config/plugins/Emby.Webhooks.dll
emby | Info App: Copying plugin from /system/plugins/NfoMetadata.dll to /config/plugins/NfoMetadata.dll
emby | Info App: Copying plugin from /system/plugins/Fanart.dll to /config/plugins/Fanart.dll
emby | Info App: Copying plugin from /system/plugins/BlurayMounter.dll to /config/plugins/BlurayMounter.dll
emby | Info App: Copying plugin from /system/plugins/EmbyGuideData.dll to /config/plugins/EmbyGuideData.dll
emby | Info App: Copying plugin from /system/plugins/MovieDb.dll to /config/plugins/MovieDb.dll
emby | Info App: Copying plugin from /system/plugins/StudioImages.dll to /config/plugins/StudioImages.dll
emby | Info App: Copying plugin from /system/plugins/Tvdb.dll to /config/plugins/Tvdb.dll
emby | Info App: Copying plugin from /system/plugins/OpenSubtitles.dll to /config/plugins/OpenSubtitles.dll
emby | Info App: Loading Emby.Api, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Web, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading MediaBrowser.Model, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading MediaBrowser.Common, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading MediaBrowser.Controller, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Providers, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Photos, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.Implementations, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.LiveTV, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.ActivityLog, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.MediaEncoding, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.LocalMetadata, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Notifications, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Web.GenericUI, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Codecs.Dxva, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Codecs, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.Connect, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.Sync, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading EmbyServer, Version=4.11.0.3, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.M3UTuner, Version=1.0.46.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.M3UTuner.dll
emby | Info App: Loading Emby.Dlna, Version=1.5.7.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.Dlna.dll
emby | Info App: Loading MBBackup, Version=1.8.6.0, Culture=neutral, PublicKeyToken=null from /config/plugins/MBBackup.dll
emby | Info App: Loading Emby.Server.CinemaMode, Version=1.0.52.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.Server.CinemaMode.dll
emby | Info App: Loading Emby.PortMapper, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.PortMapper.dll
emby | Info App: Loading AudioDb, Version=1.0.21.0, Culture=neutral, PublicKeyToken=null from /config/plugins/AudioDb.dll
emby | Info App: Loading DvdMounter, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null from /config/plugins/DvdMounter.dll
emby | Info App: Loading Emby.XmlTV, Version=1.2.2.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.XmlTV.dll
emby | Info App: Loading MusicBrainz, Version=1.0.30.0, Culture=neutral, PublicKeyToken=null from /config/plugins/MusicBrainz.dll
emby | Info App: Loading OMDb, Version=1.0.23.0, Culture=neutral, PublicKeyToken=null from /config/plugins/OMDb.dll
emby | Info App: Loading Emby.Webhooks, Version=1.0.38.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.Webhooks.dll
emby | Info App: Loading NfoMetadata, Version=1.0.86.0, Culture=neutral, PublicKeyToken=null from /config/plugins/NfoMetadata.dll
emby | Info App: Loading Fanart, Version=1.0.18.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Fanart.dll
emby | Info App: Loading BlurayMounter, Version=1.0.5.0, Culture=neutral, PublicKeyToken=null from /config/plugins/BlurayMounter.dll
emby | Info App: Loading EmbyGuideData, Version=1.0.21.0, Culture=neutral, PublicKeyToken=null from /config/plugins/EmbyGuideData.dll
emby | Info App: Loading MovieDb, Version=1.9.5.0, Culture=neutral, PublicKeyToken=null from /config/plugins/MovieDb.dll
emby | Info App: Loading StudioImages, Version=1.0.3.0, Culture=neutral, PublicKeyToken=null from /config/plugins/StudioImages.dll
emby | Info App: Loading Tvdb, Version=1.6.6.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Tvdb.dll
emby | Info App: Loading OpenSubtitles, Version=1.0.69.0, Culture=neutral, PublicKeyToken=null from /config/plugins/OpenSubtitles.dll
emby | Info SqliteUserRepository: Initializing PooledDatabaseConnectionManager with pool size: 3
emby | Info SqliteUserRepository: Sqlite version: 3.53.4
emby | Info SqliteUserRepository: Sqlite compiler options: ATOMIC_INTRINSICS=1,COMPILER=gcc-13.4.0,DEFAULT_AUTOVACUUM,DEFAULT_CACHE_SIZE=-2000,DEFAULT_FILE_FORMAT=4,DEFAULT_JOURNAL_SIZE_LIMIT=-1,DEFAULT_MMAP_SIZE=0,DEFAULT_PAGE_SIZE=4096,DEFAULT_PCACHE_INITSZ=20,DEFAULT_RECURSIVE_TRIGGERS,DEFAULT_SECTOR_SIZE=4096,DEFAULT_SYNCHRONOUS=2,DEFAULT_WAL_AUTOCHECKPOINT=1000,DEFAULT_WAL_SYNCHRONOUS=2,DEFAULT_WORKER_THREADS=0,DIRECT_OVERFLOW_READ,ENABLE_COLUMN_METADATA,ENABLE_FTS3_PARENTHESIS,ENABLE_FTS3_TOKENIZER,ENABLE_FTS5,ENABLE_MATH_FUNCTIONS,ENABLE_PERCENTILE,ENABLE_UPDATE_DELETE_LIMIT,LIKE_DOESNT_MATCH_BLOBS,MALLOC_SOFT_LIMIT=1024,MAX_ATTACHED=10,MAX_COLUMN=2000,MAX_COMPOUND_SELECT=500,MAX_DEFAULT_PAGE_SIZE=8192,MAX_EXPR_DEPTH=1000,MAX_FUNCTION_ARG=1000,MAX_LENGTH=1000000000,MAX_LIKE_PATTERN_LENGTH=50000,MAX_MMAP_SIZE=0x7fff0000,MAX_PAGE_COUNT=0xfffffffe,MAX_PAGE_SIZE=65536,MAX_SCHEMA_RETRY=25,MAX_SQL_LENGTH=1000000000,MAX_TRIGGER_DEPTH=1000,MAX_VARIABLE_NUMBER=250000,MAX_VDBE_OP=250000000,MAX_WORKER_THREADS=8,MUTEX_PTHREADS,OMIT_LOOKASIDE,OMIT_SHARED_CACHE,SYSTEM_MALLOC,TEMP_STORE=1,THREADSAFE=1
emby | Info SqliteUserRepository: Sqlite ThreadSafe: 1
emby | Info SqliteUserRepository: Sqlite ThreadingMode: MultiThreaded
emby | Info SqliteUserRepository: Opening sqlite connection to /config/data/users.db. isReadOnly: False
emby | Info SqliteUserRepository: Default journal_mode for /config/data/users.db is wal
emby | Info SqliteUserRepository: PRAGMA cache_size=-65536
emby | Info SqliteUserRepository: PRAGMA page_size=4096
emby | Info SqliteUserRepository: PRAGMA foreign_keys=1
emby | Info SqliteUserRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteItemRepository: Initializing PooledDatabaseConnectionManager with pool size: 5
emby | Info AuthenticationRepository: Initializing PooledDatabaseConnectionManager with pool size: 5
emby | Info ActivityRepository: Initializing PooledDatabaseConnectionManager with pool size: 3
emby | Info ActivityRepository: Opening sqlite connection to /config/data/activitylog.db. isReadOnly: False
emby | Info ActivityRepository: Default journal_mode for /config/data/activitylog.db is wal
emby | Info ActivityRepository: PRAGMA cache_size=-65536
emby | Info ActivityRepository: PRAGMA page_size=4096
emby | Info ActivityRepository: PRAGMA foreign_keys=1
emby | Info ActivityRepository: PRAGMA SECURE_DELETE=0
emby | Info ActivityRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info ActivityRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info NetworkManager: Detecting local network addresses
emby | Info NetworkManager: networkInterface: Ethernet eth0, Speed: 10000000000, Description: eth0
emby | Info NetworkManager: GatewayAddresses: 172.18.0.1
emby | Info NetworkManager: UnicastAddresses: 172.18.0.2
emby | Info NetworkManager: networkInterface: Loopback lo, Speed: -1, Description: lo
emby | Info NetworkManager: GatewayAddresses:
emby | Info NetworkManager: UnicastAddresses: 127.0.0.1,::1
emby | Info NetworkManager: Detected local ip addresses: [{"IPAddress":"172.18.0.2","HasGateWayAddress":true,"PrefixLength":16,"IPv4Mask":"255.255.0.0","BroadcastAddress":"172.18.255.255"},{"IPAddress":"127.0.0.1","HasGateWayAddress":false,"PrefixLength":8,"IPv4Mask":"255.0.0.0","BroadcastAddress":"127.255.255.255"},{"IPAddress":"::1","HasGateWayAddress":false,"PrefixLength":128}]
emby | Info App: Adding HttpListener prefix http://+:8096/
emby | Info AuthenticationRepository: Opening sqlite connection to /config/data/authentication.db. isReadOnly: False
emby | Info AuthenticationRepository: Default journal_mode for /config/data/authentication.db is wal
emby | Info AuthenticationRepository: PRAGMA cache_size=-65536
emby | Info AuthenticationRepository: PRAGMA page_size=4096
emby | Info AuthenticationRepository: PRAGMA foreign_keys=1
emby | Info AuthenticationRepository: PRAGMA SECURE_DELETE=0
emby | Info AuthenticationRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info AuthenticationRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteItemRepository: Opening sqlite connection to /config/data/library.db. isReadOnly: False
emby | Info SqliteItemRepository: Default journal_mode for /config/data/library.db is wal
emby | Info SqliteItemRepository: PRAGMA cache_size=-131072
emby | Info SqliteItemRepository: PRAGMA page_size=4096
emby | Info SqliteItemRepository: PRAGMA foreign_keys=1
emby | Info SqliteItemRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteItemRepository: Init Complete
emby | Info SqliteItemRepository: Opening sqlite connection to /config/data/library.db. isReadOnly: True
emby | Info SqliteItemRepository: PRAGMA cache_size=-131072
emby | Info SqliteItemRepository: PRAGMA page_size=4096
emby | Info SqliteItemRepository: PRAGMA foreign_keys=1
emby | Info SqliteItemRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteUserRepository: Opening sqlite connection to /config/data/users.db. isReadOnly: True
emby | Info SqliteUserRepository: PRAGMA cache_size=-65536
emby | Info SqliteUserRepository: PRAGMA page_size=4096
emby | Info SqliteUserRepository: PRAGMA foreign_keys=1
emby | Info SqliteUserRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info App: Emby Server 4.11.0.3
emby | Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
emby | Operating system: Linux version 7.0.2-6-pve (build@proxmox) (gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP PREEMPT_DYNAMIC PMX 7.0.2-6 (2
emby | OS/Process: x64/x64
emby | Framework: .NET 8.0.28
emby | Runtime: system/System.Private.CoreLib.dll
emby | Processor count: 6
emby | Data path: /config
emby | Application path: /system
emby | Info App: Logs path: /config/logs
emby | Info App: Cache path: /config/cache
emby | Info App: Internal metadata path: /config/metadata
emby | Info App: Transcoding temporary files path: /config/transcoding-temp
emby | Info App: DefaultThreadCurrentCulture: en-US
emby | Info App: DefaultThreadCurrentUICulture: en-US
emby | Info App: DefaultThreadCurrentUICulture: en-US
emby | Info App: Server Friendly Name: ‌0e007414cdff‌
emby | Info App: Local time: 09/30/2026 17:28:28 +02:00
emby | Info FfmpegManager: FFMpeg: /bin/ffmpeg
emby | Info FfmpegManager: FFProbe: /bin/ffprobe
emby | Info FfmpegManager: FFDetect: /bin/ffdetect
emby | Info Skia: SkiaSharp version: 2.88.0.0
emby | Info libvips: NetVips version: 3.0.0.0
emby | Info ImageProcessor: Adding image processor Skia
emby | Info ImageProcessor: Adding image processor libvips
emby | Info TaskManager: Daily trigger for Video preview thumbnail extraction set to fire at 10/01/2026 02:00:00, which is 511.5091529933333 minutes from now.
emby | Info TaskManager: Daily trigger for Rotate log file set to fire at 10/01/2026 00:00:00, which is 391.5087986016667 minutes from now.
emby | Info TaskManager: Queueing task HardwareDetectionScheduledTask
emby | Info TaskManager: Executing Hardware Detection
emby | Info TaskManager: Daily trigger for Emby Server Backup set to fire at 10/01/2026 00:10:00, which is 401.5086428266667 minutes from now.
emby | Info App: ServerId: d21d02efaa4f4b778f0e53cb03473983
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -version' Execute: /bin/ffmpeg -hide_banner -version
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -version' Process exited with code 0
emby | Info App: Starting entry point Emby.Server.Implementations.Networking.RemoteAddressEntryPoint
emby | Info App: Loading data from /config/data/wan.dat
emby | Info App: Entry point completed: Emby.Server.Implementations.Networking.RemoteAddressEntryPoint. Duration: 0.001921 seconds
emby | Info App: Starting entry point Emby.Server.Connect.ConnectEntryPoint
emby | Info App: Loading data from /config/data/connect.txt
emby | Info App: Entry point completed: Emby.Server.Connect.ConnectEntryPoint. Duration: 0.0015847 seconds
emby | Info App: Starting entry point Emby.Dlna.Main.DlnaEntryPoint
emby | Info FfmpegManager: FfmpegValidator.Validate complete
emby | Info App: Entry point completed: Emby.Dlna.Main.DlnaEntryPoint. Duration: 0.0609371 seconds
emby | Info App: Core startup complete
emby | Info App: Starting entry point Emby.Server.Implementations.Udp.UdpServerEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Udp.UdpServerEntryPoint. Duration: 0.0012559 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Session.PartyEventNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.Session.PartyEventNotifier. Duration: 0.0016069 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Playlists.PlaylistUpgradeEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Playlists.PlaylistUpgradeEntryPoint. Duration: 0.0017783 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Library.DeviceAccessEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Library.DeviceAccessEntryPoint. Duration: 0.0004194 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.IO.LibraryMonitorStartup
emby | Info App: Entry point completed: Emby.Server.Implementations.IO.LibraryMonitorStartup. Duration: 0.0210797 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.AutomaticRestartEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.AutomaticRestartEntryPoint. Duration: 0.0004955 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.KeepServerAwake
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.KeepServerAwake. Duration: 0.0001802 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.LibraryChangedNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.LibraryChangedNotifier. Duration: 0.0008391 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.LogLibrariesEntryPoint
emby | Info App: Libraries
emby | Server Configuration: CollapseVideoFolders: False
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.LogLibrariesEntryPoint. Duration: 0.0009445 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.ServerEventNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.ServerEventNotifier. Duration: 0.0018201 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.StartupWizard
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.StartupWizard. Duration: 0.0004152 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.SystemEvents
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.SystemEvents. Duration: 0.0002895 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.UserDataChangeNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.UserDataChangeNotifier. Duration: 0.000353 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Channels.ChannelsEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Channels.ChannelsEntryPoint. Duration: 0.0026736 seconds
emby | Info App: Starting entry point Emby.LiveTV.EntryPoint
emby | Info LiveTV: Loading live tv data from /config/data/livetv/timers
emby | Info App: Entry point completed: Emby.LiveTV.EntryPoint. Duration: 0.0026515 seconds
emby | Info App: Starting entry point Emby.LiveTV.RecordingNotifier
emby | Info App: Entry point completed: Emby.LiveTV.RecordingNotifier. Duration: 0.0010971 seconds
emby | Info App: Starting entry point Emby.Server.MediaEncoding.Api.EncodingManagerEntryPoint
emby | Info App: Entry point completed: Emby.Server.MediaEncoding.Api.EncodingManagerEntryPoint. Duration: 0.000754 seconds
emby | Info App: Starting entry point Emby.Notifications.NotificationManagerEntryPoint
emby | Info Notifications: Registering event nofitier Activity Log
emby | Info Notifications: Registering event nofitier Emby Server User Notifications
emby | Info Notifications: Registering event factory CoreNotificationTypeFactory
emby | Info Notifications: Registering event factory BackupNotificationTypeFactory
emby | Info App: Entry point completed: Emby.Notifications.NotificationManagerEntryPoint. Duration: 0.0236164 seconds
emby | Info App: Starting entry point Emby.Server.Sync.SyncNotificationEntryPoint
emby | Info App: Entry point completed: Emby.Server.Sync.SyncNotificationEntryPoint. Duration: 0.0010252 seconds
emby | Info App: Starting entry point EmbyServer.Windows.LoopUtilEntryPoint
emby | Info App: Entry point completed: EmbyServer.Windows.LoopUtilEntryPoint. Duration: 6.39E-05 seconds
emby | Info App: Starting entry point MBBackup.ServerEntryPoint
emby | Info App: Entry point completed: MBBackup.ServerEntryPoint. Duration: 4.93E-05 seconds
emby | Info App: Starting entry point Emby.Security.PluginSecurityManager
emby | Info App: Entry point completed: Emby.Security.PluginSecurityManager. Duration: 3.32E-05 seconds
emby | Info App: Starting entry point Emby.Server.CinemaMode.IntrosEntryPoint
emby | Info App: Entry point completed: Emby.Server.CinemaMode.IntrosEntryPoint. Duration: 0.0001156 seconds
emby | Info App: Starting entry point Emby.PortMapper.ExternalPortForwarding
emby | Info App: Entry point completed: Emby.PortMapper.ExternalPortForwarding. Duration: 0.001073 seconds
emby | Info App: Starting entry point NfoMetadata.EntryPoint
emby | Info App: Entry point completed: NfoMetadata.EntryPoint. Duration: 0.000118 seconds
emby | Info App: Starting entry point Tvdb.EntryPoint
emby | Info App: Entry point completed: Tvdb.EntryPoint. Duration: 3.49E-05 seconds
emby | Info App: All entry points have started
@@ -0,0 +1,3 @@
{
"/srv/felhom-gate/hdd/userdata/media": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,3 @@
{
"/srv/felhom-gate/hdd/userdata/media": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
@@ -0,0 +1,682 @@
[
{
"t": 15.1,
"containers": {
"emby": {
"limit": 2147483648,
"current": 156217344,
"peak": 157429760,
"anon": 101310464,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 300
},
{
"t": 30.2,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154136576,
"peak": 157536256,
"anon": 99250176,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 600
},
{
"t": 45.3,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154468352,
"peak": 157536256,
"anon": 99201024,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 900
},
{
"t": 60.4,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154693632,
"peak": 157536256,
"anon": 99196928,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1200
},
{
"t": 75.6,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154054656,
"peak": 157536256,
"anon": 99139584,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1500
},
{
"t": 90.7,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154042368,
"peak": 157536256,
"anon": 99147776,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 1800
},
{
"t": 105.8,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154378240,
"peak": 157536256,
"anon": 99176448,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2100
},
{
"t": 120.9,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154411008,
"peak": 157536256,
"anon": 99229696,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2400
},
{
"t": 136.0,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154640384,
"peak": 157536256,
"anon": 99229696,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 2700
},
{
"t": 151.1,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151437312,
"peak": 157536256,
"anon": 96231424,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3001
},
{
"t": 166.2,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151207936,
"peak": 157536256,
"anon": 96276480,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3301
},
{
"t": 181.4,
"containers": {
"emby": {
"limit": 2147483648,
"current": 152010752,
"peak": 157536256,
"anon": 96288768,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3601
},
{
"t": 196.5,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151928832,
"peak": 157536256,
"anon": 96251904,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 3901
},
{
"t": 211.6,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151961600,
"peak": 157536256,
"anon": 96759808,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4199
},
{
"t": 226.7,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151851008,
"peak": 157536256,
"anon": 96849920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4499
},
{
"t": 241.8,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151855104,
"peak": 157536256,
"anon": 96854016,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 4799
},
{
"t": 256.9,
"containers": {
"emby": {
"limit": 2147483648,
"current": 152092672,
"peak": 157536256,
"anon": 96849920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5099
},
{
"t": 272.1,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151904256,
"peak": 157536256,
"anon": 96849920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5402
},
{
"t": 287.2,
"containers": {
"emby": {
"limit": 2147483648,
"current": 154804224,
"peak": 157536256,
"anon": 99713024,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 5702
},
{
"t": 302.3,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151896064,
"peak": 157536256,
"anon": 96526336,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6002
},
{
"t": 317.5,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151539712,
"peak": 157536256,
"anon": 96497664,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6302
},
{
"t": 332.6,
"containers": {
"emby": {
"limit": 2147483648,
"current": 152031232,
"peak": 157536256,
"anon": 96681984,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6602
},
{
"t": 347.7,
"containers": {
"emby": {
"limit": 2147483648,
"current": 152801280,
"peak": 157536256,
"anon": 96944128,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 6902
},
{
"t": 362.8,
"containers": {
"emby": {
"limit": 2147483648,
"current": 151846912,
"peak": 157536256,
"anon": 96948224,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7200
},
{
"t": 377.9,
"containers": {
"emby": {
"limit": 2147483648,
"current": 152330240,
"peak": 157536256,
"anon": 96948224,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7500
},
{
"t": 393.0,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153792512,
"peak": 157536256,
"anon": 97878016,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 7800
},
{
"t": 408.2,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153501696,
"peak": 157536256,
"anon": 97869824,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8100
},
{
"t": 423.3,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153280512,
"peak": 157536256,
"anon": 97873920,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8396
},
{
"t": 438.4,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153022464,
"peak": 157536256,
"anon": 97890304,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8696
},
{
"t": 453.5,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153305088,
"peak": 157536256,
"anon": 97890304,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 8996
},
{
"t": 468.6,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153513984,
"peak": 157536256,
"anon": 97890304,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9296
},
{
"t": 483.7,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153382912,
"peak": 157536256,
"anon": 97890304,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9596
},
{
"t": 498.9,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153264128,
"peak": 157536256,
"anon": 97890304,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 9896
},
{
"t": 514.0,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153776128,
"peak": 157536256,
"anon": 97894400,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10196
},
{
"t": 529.1,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153600000,
"peak": 157536256,
"anon": 97906688,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10496
},
{
"t": 544.2,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153337856,
"peak": 157536256,
"anon": 97906688,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 10796
},
{
"t": 559.4,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153845760,
"peak": 157536256,
"anon": 97886208,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11096
},
{
"t": 574.5,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153067520,
"peak": 157536256,
"anon": 97886208,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11394
},
{
"t": 589.6,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153624576,
"peak": 157536256,
"anon": 97906688,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11694
},
{
"t": 604.7,
"containers": {
"emby": {
"limit": 2147483648,
"current": 153108480,
"peak": 157536256,
"anon": 97906688,
"oom_kill": 0,
"restarts": 0,
"oomkilled_flag": false,
"status": "running",
"cgroup": true
}
},
"requests": 11992
}
]
@@ -0,0 +1,3 @@
emby | Info SqliteUserRepository: Sqlite compiler options: ATOMIC_INTRINSICS=1,COMPILER=gcc-13.4.0,DEFAULT_AUTOVACUUM,DEFAULT_CACHE_SIZE=-2000,DEFAULT_FILE_FORMAT=4,DEFAULT_JOURNAL_SIZE_LIMIT=-1,DEFAULT_MMAP_SIZE=0,DEFAULT_PAGE_SIZE=4096,DEFAULT_PCACHE_INITSZ=20,DEFAULT_RECURSIVE_TRIGGERS,DEFAULT_SECTOR_SIZE=4096,DEFAULT_SYNCHRONOUS=2,DEFAULT_WAL_AUTOCHECKPOINT=1000,DEFAULT_WAL_SYNCHRONOUS=2,DEFAULT_WORKER_THREADS=0,DIRECT_OVERFLOW_READ,ENABLE_COLUMN_METADATA,ENABLE_FTS3_PARENTHESIS,ENABLE_FTS3_TOKENIZER,ENABLE_FTS5,ENABLE_MATH_FUNCTIONS,ENABLE_PERCENTILE,ENABLE_UPDATE_DELETE_LIMIT,LIKE_DOESNT_MATCH_BLOBS,MALLOC_SOFT_LIMIT=1024,MAX_ATTACHED=10,MAX_COLUMN=2000,MAX_COMPOUND_SELECT=500,MAX_DEFAULT_PAGE_SIZE=8192,MAX_EXPR_DEPTH=1000,MAX_FUNCTION_ARG=1000,MAX_LENGTH=1000000000,MAX_LIKE_PATTERN_LENGTH=50000,MAX_MMAP_SIZE=0x7fff0000,MAX_PAGE_COUNT=0xfffffffe,MAX_PAGE_SIZE=65536,MAX_SCHEMA_RETRY=25,MAX_SQL_LENGTH=1000000000,MAX_TRIGGER_DEPTH=1000,MAX_VARIABLE_NUMBER=250000,MAX_VDBE_OP=250000000,MAX_WORKER_THREADS=8,MUTEX_PTHREADS,OMIT_LOOKASIDE,OMIT_SHARED_CACHE,SYSTEM_MALLOC,TEMP_STORE=1,THREADSAFE=1
emby | Info App: Starting entry point Emby.Server.Implementations.Playlists.PlaylistUpgradeEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Playlists.PlaylistUpgradeEntryPoint. Duration: 0.0012941 seconds
@@ -0,0 +1,58 @@
[15:16:39] scratch drive folders cleared before FROM (R-656): ['/srv/felhom-gate/hdd/userdata/media']
[15:16:39] MV-emby: deploying emby at FROM {'emby': 'emby/embyserver:4.11.0.3'}
[15:17:29] FROM settled=True in 30.8s :: {"emby": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:17:29] fixture: the BOX walk's own (Emby), through upgrade_boxport
[15:17:29] emby: seeded first user drillde12c4fd
[15:17:29] emby: readback found=True (http 200, control passed)
[15:17:29] C1 (seed reads back BEFORE): True
[15:17:29] MV-emby: swapping to TO {'emby': 'emby/embyserver:4.11.0.4'}
[15:17:49] TO up -d rc=0
[15:18:20] TO settled=True in 30.8s :: {"emby": {"status": "running", "health": "healthy", "restarts": 0, "exit": 0}}
[15:18:20] migration lines observed: 3
[15:18:20] emby: readback found=True (http 200, control passed)
[15:18:20] RESULT (seed reads back AFTER): True
[15:18:21] memory watch: 600s, 4 callers on 1 path(s) at 172.18.0.2:8096
[15:18:36] + 15s emby=148M/2048M peak=150M kills=0 rs=0 reqs=300
[15:18:51] + 30s emby=146M/2048M peak=150M kills=0 rs=0 reqs=600
[15:19:06] + 45s emby=147M/2048M peak=150M kills=0 rs=0 reqs=900
[15:19:21] + 60s emby=147M/2048M peak=150M kills=0 rs=0 reqs=1200
[15:19:36] + 76s emby=146M/2048M peak=150M kills=0 rs=0 reqs=1500
[15:19:51] + 91s emby=146M/2048M peak=150M kills=0 rs=0 reqs=1800
[15:20:06] + 106s emby=147M/2048M peak=150M kills=0 rs=0 reqs=2100
[15:20:22] + 121s emby=147M/2048M peak=150M kills=0 rs=0 reqs=2400
[15:20:37] + 136s emby=147M/2048M peak=150M kills=0 rs=0 reqs=2700
[15:20:52] + 151s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3001
[15:21:07] + 166s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3301
[15:21:22] + 181s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3601
[15:21:37] + 196s emby=144M/2048M peak=150M kills=0 rs=0 reqs=3901
[15:21:52] + 212s emby=144M/2048M peak=150M kills=0 rs=0 reqs=4199
[15:22:07] + 227s emby=144M/2048M peak=150M kills=0 rs=0 reqs=4499
[15:22:23] + 242s emby=144M/2048M peak=150M kills=0 rs=0 reqs=4799
[15:22:38] + 257s emby=145M/2048M peak=150M kills=0 rs=0 reqs=5099
[15:22:53] + 272s emby=144M/2048M peak=150M kills=0 rs=0 reqs=5402
[15:23:08] + 287s emby=147M/2048M peak=150M kills=0 rs=0 reqs=5702
[15:23:23] + 302s emby=144M/2048M peak=150M kills=0 rs=0 reqs=6002
[15:23:38] + 318s emby=144M/2048M peak=150M kills=0 rs=0 reqs=6302
[15:23:53] + 333s emby=144M/2048M peak=150M kills=0 rs=0 reqs=6602
[15:24:08] + 348s emby=145M/2048M peak=150M kills=0 rs=0 reqs=6902
[15:24:24] + 363s emby=144M/2048M peak=150M kills=0 rs=0 reqs=7200
[15:24:39] + 378s emby=145M/2048M peak=150M kills=0 rs=0 reqs=7500
[15:24:54] + 393s emby=146M/2048M peak=150M kills=0 rs=0 reqs=7800
[15:25:09] + 408s emby=146M/2048M peak=150M kills=0 rs=0 reqs=8100
[15:25:24] + 423s emby=146M/2048M peak=150M kills=0 rs=0 reqs=8396
[15:25:39] + 438s emby=145M/2048M peak=150M kills=0 rs=0 reqs=8696
[15:25:54] + 454s emby=146M/2048M peak=150M kills=0 rs=0 reqs=8996
[15:26:09] + 469s emby=146M/2048M peak=150M kills=0 rs=0 reqs=9296
[15:26:24] + 484s emby=146M/2048M peak=150M kills=0 rs=0 reqs=9596
[15:26:40] + 499s emby=146M/2048M peak=150M kills=0 rs=0 reqs=9896
[15:26:55] + 514s emby=146M/2048M peak=150M kills=0 rs=0 reqs=10196
[15:27:10] + 529s emby=146M/2048M peak=150M kills=0 rs=0 reqs=10496
[15:27:25] + 544s emby=146M/2048M peak=150M kills=0 rs=0 reqs=10796
[15:27:40] + 559s emby=146M/2048M peak=150M kills=0 rs=0 reqs=11096
[15:27:55] + 574s emby=145M/2048M peak=150M kills=0 rs=0 reqs=11394
[15:28:10] + 590s emby=146M/2048M peak=150M kills=0 rs=0 reqs=11694
[15:28:25] + 605s emby=146M/2048M peak=150M kills=0 rs=0 reqs=11992
[15:28:26] memory watch: killed=False tight=[] requests=11992 codes={'302': 11992}
[15:28:26] MV-emby: ABORT — putting the FROM images back
[15:28:57] emby: readback found=True (http 200, control passed)
[15:28:57] ABORT: app came back in 30.8s; data present=True
@@ -0,0 +1,285 @@
emby | s6-rc: info: service s6rc-oneshot-runner: starting
emby | s6-rc: info: service s6rc-oneshot-runner successfully started
emby | s6-rc: info: service fix-attrs: starting
emby | s6-rc: info: service fix-attrs successfully started
emby | s6-rc: info: service legacy-cont-init: starting
emby | s6-rc: info: service legacy-cont-init successfully started
emby | s6-rc: info: service emby-server: starting
emby | s6-rc: info: service emby-server successfully started
emby | s6-rc: info: service legacy-services: starting
emby | s6-rc: info: service legacy-services successfully started
emby | Info Main: Application path: /system/EmbyServer.dll
emby | Info NetworkManager: Adding event handler for NetworkChange.NetworkAddressChanged
emby | Info App: Setting default culture to en-us
emby | Info Main: Emby Server 4.11.0.4
emby | Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
emby | Operating system: Linux version 7.0.2-6-pve (build@proxmox) (gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP PREEMPT_DYNAMIC PMX 7.0.2-6 (2
emby | OS/Process: x64/x64
emby | Framework: .NET 8.0.28
emby | Runtime: system/System.Private.CoreLib.dll
emby | Processor count: 6
emby | Data path: /config
emby | Application path: /system
emby | Info Main: Logs path: /config/logs
emby | Info Main: Cache path: /config/cache
emby | Info Main: Internal metadata path: /config/metadata
emby | Info Main: DefaultThreadCurrentCulture: en-US
emby | Info Main: DefaultThreadCurrentUICulture: en-US
emby | Info Main: DefaultThreadCurrentUICulture: en-US
emby | Info Main: Server Friendly Name: ‌311c00602fa0‌
emby | Info Main: Local time: 09/30/2026 17:17:50 +02:00
emby | Info App: Emby Server Version: 4.11.0.4
emby | Info App: Loading assemblies
emby | Info App: File /config/plugins/Emby.M3UTuner.dll has version 1.0.46.0
emby | Info App: File /system/plugins/Emby.M3UTuner.dll has version 1.0.46.0
emby | Info App: File /config/plugins/Emby.Dlna.dll has version 1.5.7.0
emby | Info App: File /system/plugins/Emby.Dlna.dll has version 1.5.7.0
emby | Info App: File /config/plugins/MBBackup.dll has version 1.8.6.0
emby | Info App: File /system/plugins/MBBackup.dll has version 1.8.6.0
emby | Info App: File /config/plugins/Emby.Server.CinemaMode.dll has version 1.0.53.0
emby | Info App: File /system/plugins/Emby.Server.CinemaMode.dll has version 1.0.53.0
emby | Info App: File /config/plugins/Emby.PortMapper.dll has version 1.3.0.0
emby | Info App: File /system/plugins/Emby.PortMapper.dll has version 1.3.0.0
emby | Info App: File /config/plugins/AudioDb.dll has version 1.0.22.0
emby | Info App: File /system/plugins/AudioDb.dll has version 1.0.21.0
emby | Info App: File /config/plugins/DvdMounter.dll has version 1.0.2.0
emby | Info App: File /system/plugins/DvdMounter.dll has version 1.0.2.0
emby | Info App: File /config/plugins/Emby.XmlTV.dll has version 1.2.2.0
emby | Info App: File /system/plugins/Emby.XmlTV.dll has version 1.2.2.0
emby | Info App: File /config/plugins/MusicBrainz.dll has version 1.0.32.0
emby | Info App: File /system/plugins/MusicBrainz.dll has version 1.0.32.0
emby | Info App: File /config/plugins/OMDb.dll has version 1.0.23.0
emby | Info App: File /system/plugins/OMDb.dll has version 1.0.23.0
emby | Info App: File /config/plugins/Emby.Webhooks.dll has version 1.0.38.0
emby | Info App: File /system/plugins/Emby.Webhooks.dll has version 1.0.38.0
emby | Info App: File /config/plugins/NfoMetadata.dll has version 1.0.86.0
emby | Info App: File /system/plugins/NfoMetadata.dll has version 1.0.86.0
emby | Info App: File /config/plugins/Fanart.dll has version 1.0.18.0
emby | Info App: File /system/plugins/Fanart.dll has version 1.0.18.0
emby | Info App: File /config/plugins/BlurayMounter.dll has version 1.0.5.0
emby | Info App: File /system/plugins/BlurayMounter.dll has version 1.0.5.0
emby | Info App: File /config/plugins/EmbyGuideData.dll has version 1.0.21.0
emby | Info App: File /system/plugins/EmbyGuideData.dll has version 1.0.21.0
emby | Info App: File /config/plugins/MovieDb.dll has version 1.9.5.0
emby | Info App: File /system/plugins/MovieDb.dll has version 1.9.5.0
emby | Info App: File /config/plugins/StudioImages.dll has version 1.0.3.0
emby | Info App: File /system/plugins/StudioImages.dll has version 1.0.3.0
emby | Info App: File /config/plugins/Tvdb.dll has version 1.6.7.0
emby | Info App: File /system/plugins/Tvdb.dll has version 1.6.6.0
emby | Info App: File /config/plugins/OpenSubtitles.dll has version 1.0.69.0
emby | Info App: File /system/plugins/OpenSubtitles.dll has version 1.0.69.0
emby | Info App: Loading Emby.Api, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Web, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading MediaBrowser.Model, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading MediaBrowser.Common, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading MediaBrowser.Controller, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Providers, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Photos, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.Implementations, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.LiveTV, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.ActivityLog, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.MediaEncoding, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.LocalMetadata, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Notifications, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Web.GenericUI, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Codecs.Dxva, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Codecs, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.Connect, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.Server.Sync, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading EmbyServer, Version=4.11.0.4, Culture=neutral, PublicKeyToken=null
emby | Info App: Loading Emby.M3UTuner, Version=1.0.46.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.M3UTuner.dll
emby | Info App: Loading Emby.Dlna, Version=1.5.7.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.Dlna.dll
emby | Info App: Loading MBBackup, Version=1.8.6.0, Culture=neutral, PublicKeyToken=null from /config/plugins/MBBackup.dll
emby | Info App: Loading Emby.Server.CinemaMode, Version=1.0.53.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.Server.CinemaMode.dll
emby | Info App: Loading Emby.PortMapper, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.PortMapper.dll
emby | Info App: Loading AudioDb, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null from /config/plugins/AudioDb.dll
emby | Info App: Loading DvdMounter, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null from /config/plugins/DvdMounter.dll
emby | Info App: Loading Emby.XmlTV, Version=1.2.2.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.XmlTV.dll
emby | Info App: Loading MusicBrainz, Version=1.0.32.0, Culture=neutral, PublicKeyToken=null from /config/plugins/MusicBrainz.dll
emby | Info App: Loading OMDb, Version=1.0.23.0, Culture=neutral, PublicKeyToken=null from /config/plugins/OMDb.dll
emby | Info App: Loading Emby.Webhooks, Version=1.0.38.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Emby.Webhooks.dll
emby | Info App: Loading NfoMetadata, Version=1.0.86.0, Culture=neutral, PublicKeyToken=null from /config/plugins/NfoMetadata.dll
emby | Info App: Loading Fanart, Version=1.0.18.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Fanart.dll
emby | Info App: Loading BlurayMounter, Version=1.0.5.0, Culture=neutral, PublicKeyToken=null from /config/plugins/BlurayMounter.dll
emby | Info App: Loading EmbyGuideData, Version=1.0.21.0, Culture=neutral, PublicKeyToken=null from /config/plugins/EmbyGuideData.dll
emby | Info App: Loading MovieDb, Version=1.9.5.0, Culture=neutral, PublicKeyToken=null from /config/plugins/MovieDb.dll
emby | Info App: Loading StudioImages, Version=1.0.3.0, Culture=neutral, PublicKeyToken=null from /config/plugins/StudioImages.dll
emby | Info App: Loading Tvdb, Version=1.6.7.0, Culture=neutral, PublicKeyToken=null from /config/plugins/Tvdb.dll
emby | Info App: Loading OpenSubtitles, Version=1.0.69.0, Culture=neutral, PublicKeyToken=null from /config/plugins/OpenSubtitles.dll
emby | Info SqliteUserRepository: Initializing PooledDatabaseConnectionManager with pool size: 3
emby | Info SqliteUserRepository: Sqlite version: 3.53.4
emby | Info SqliteUserRepository: Sqlite compiler options: ATOMIC_INTRINSICS=1,COMPILER=gcc-13.4.0,DEFAULT_AUTOVACUUM,DEFAULT_CACHE_SIZE=-2000,DEFAULT_FILE_FORMAT=4,DEFAULT_JOURNAL_SIZE_LIMIT=-1,DEFAULT_MMAP_SIZE=0,DEFAULT_PAGE_SIZE=4096,DEFAULT_PCACHE_INITSZ=20,DEFAULT_RECURSIVE_TRIGGERS,DEFAULT_SECTOR_SIZE=4096,DEFAULT_SYNCHRONOUS=2,DEFAULT_WAL_AUTOCHECKPOINT=1000,DEFAULT_WAL_SYNCHRONOUS=2,DEFAULT_WORKER_THREADS=0,DIRECT_OVERFLOW_READ,ENABLE_COLUMN_METADATA,ENABLE_FTS3_PARENTHESIS,ENABLE_FTS3_TOKENIZER,ENABLE_FTS5,ENABLE_MATH_FUNCTIONS,ENABLE_PERCENTILE,ENABLE_UPDATE_DELETE_LIMIT,LIKE_DOESNT_MATCH_BLOBS,MALLOC_SOFT_LIMIT=1024,MAX_ATTACHED=10,MAX_COLUMN=2000,MAX_COMPOUND_SELECT=500,MAX_DEFAULT_PAGE_SIZE=8192,MAX_EXPR_DEPTH=1000,MAX_FUNCTION_ARG=1000,MAX_LENGTH=1000000000,MAX_LIKE_PATTERN_LENGTH=50000,MAX_MMAP_SIZE=0x7fff0000,MAX_PAGE_COUNT=0xfffffffe,MAX_PAGE_SIZE=65536,MAX_SCHEMA_RETRY=25,MAX_SQL_LENGTH=1000000000,MAX_TRIGGER_DEPTH=1000,MAX_VARIABLE_NUMBER=250000,MAX_VDBE_OP=250000000,MAX_WORKER_THREADS=8,MUTEX_PTHREADS,OMIT_LOOKASIDE,OMIT_SHARED_CACHE,SYSTEM_MALLOC,TEMP_STORE=1,THREADSAFE=1
emby | Info SqliteUserRepository: Sqlite ThreadSafe: 1
emby | Info SqliteUserRepository: Sqlite ThreadingMode: MultiThreaded
emby | Info SqliteUserRepository: Opening sqlite connection to /config/data/users.db. isReadOnly: False
emby | Info SqliteUserRepository: Default journal_mode for /config/data/users.db is wal
emby | Info SqliteUserRepository: PRAGMA cache_size=-65536
emby | Info SqliteUserRepository: PRAGMA page_size=4096
emby | Info SqliteUserRepository: PRAGMA foreign_keys=1
emby | Info SqliteUserRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteItemRepository: Initializing PooledDatabaseConnectionManager with pool size: 5
emby | Info AuthenticationRepository: Initializing PooledDatabaseConnectionManager with pool size: 5
emby | Info ActivityRepository: Initializing PooledDatabaseConnectionManager with pool size: 3
emby | Info ActivityRepository: Opening sqlite connection to /config/data/activitylog.db. isReadOnly: False
emby | Info ActivityRepository: Default journal_mode for /config/data/activitylog.db is wal
emby | Info ActivityRepository: PRAGMA cache_size=-65536
emby | Info ActivityRepository: PRAGMA page_size=4096
emby | Info ActivityRepository: PRAGMA foreign_keys=1
emby | Info ActivityRepository: PRAGMA SECURE_DELETE=0
emby | Info ActivityRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info ActivityRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info NetworkManager: Detecting local network addresses
emby | Info NetworkManager: networkInterface: Ethernet eth0, Speed: 10000000000, Description: eth0
emby | Info NetworkManager: GatewayAddresses: 172.18.0.1
emby | Info NetworkManager: UnicastAddresses: 172.18.0.2
emby | Info NetworkManager: networkInterface: Loopback lo, Speed: -1, Description: lo
emby | Info NetworkManager: GatewayAddresses:
emby | Info NetworkManager: UnicastAddresses: 127.0.0.1,::1
emby | Info NetworkManager: Detected local ip addresses: [{"IPAddress":"172.18.0.2","HasGateWayAddress":true,"PrefixLength":16,"IPv4Mask":"255.255.0.0","BroadcastAddress":"172.18.255.255"},{"IPAddress":"127.0.0.1","HasGateWayAddress":false,"PrefixLength":8,"IPv4Mask":"255.0.0.0","BroadcastAddress":"127.255.255.255"},{"IPAddress":"::1","HasGateWayAddress":false,"PrefixLength":128}]
emby | Info App: Adding HttpListener prefix http://+:8096/
emby | Info AuthenticationRepository: Opening sqlite connection to /config/data/authentication.db. isReadOnly: False
emby | Info AuthenticationRepository: Default journal_mode for /config/data/authentication.db is wal
emby | Info AuthenticationRepository: PRAGMA cache_size=-65536
emby | Info AuthenticationRepository: PRAGMA page_size=4096
emby | Info AuthenticationRepository: PRAGMA foreign_keys=1
emby | Info AuthenticationRepository: PRAGMA SECURE_DELETE=0
emby | Info AuthenticationRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info AuthenticationRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteItemRepository: Opening sqlite connection to /config/data/library.db. isReadOnly: False
emby | Info SqliteItemRepository: Default journal_mode for /config/data/library.db is wal
emby | Info SqliteItemRepository: PRAGMA cache_size=-131072
emby | Info SqliteItemRepository: PRAGMA page_size=4096
emby | Info SqliteItemRepository: PRAGMA foreign_keys=1
emby | Info SqliteItemRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteItemRepository: Init Complete
emby | Info SqliteItemRepository: Opening sqlite connection to /config/data/library.db. isReadOnly: True
emby | Info SqliteItemRepository: PRAGMA cache_size=-131072
emby | Info SqliteItemRepository: PRAGMA page_size=4096
emby | Info SqliteItemRepository: PRAGMA foreign_keys=1
emby | Info SqliteItemRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteItemRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info SqliteUserRepository: Opening sqlite connection to /config/data/users.db. isReadOnly: True
emby | Info SqliteUserRepository: PRAGMA cache_size=-65536
emby | Info SqliteUserRepository: PRAGMA page_size=4096
emby | Info SqliteUserRepository: PRAGMA foreign_keys=1
emby | Info SqliteUserRepository: PRAGMA SECURE_DELETE=0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DDL to 0 is 0
emby | Info SqliteUserRepository: Result of setting SQLITE_DBCONFIG_DQS_DML to 0 is 0
emby | Info App: Emby Server 4.11.0.4
emby | Command line: /system/EmbyServer.dll -programdata /config -ffdetect /bin/ffdetect -ffmpeg /bin/ffmpeg -ffprobe /bin/ffprobe -restartexitcode 3
emby | Operating system: Linux version 7.0.2-6-pve (build@proxmox) (gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP PREEMPT_DYNAMIC PMX 7.0.2-6 (2
emby | OS/Process: x64/x64
emby | Framework: .NET 8.0.28
emby | Runtime: system/System.Private.CoreLib.dll
emby | Processor count: 6
emby | Data path: /config
emby | Application path: /system
emby | Info App: Logs path: /config/logs
emby | Info App: Cache path: /config/cache
emby | Info App: Internal metadata path: /config/metadata
emby | Info App: Transcoding temporary files path: /config/transcoding-temp
emby | Info App: DefaultThreadCurrentCulture: en-US
emby | Info App: DefaultThreadCurrentUICulture: en-US
emby | Info App: DefaultThreadCurrentUICulture: en-US
emby | Info App: Server Friendly Name: ‌311c00602fa0‌
emby | Info App: Local time: 09/30/2026 17:17:50 +02:00
emby | Info FfmpegManager: FFMpeg: /bin/ffmpeg
emby | Info FfmpegManager: FFProbe: /bin/ffprobe
emby | Info FfmpegManager: FFDetect: /bin/ffdetect
emby | Info Skia: SkiaSharp version: 2.88.0.0
emby | Info libvips: NetVips version: 3.0.0.0
emby | Info ImageProcessor: Adding image processor Skia
emby | Info ImageProcessor: Adding image processor libvips
emby | Info TaskManager: Daily trigger for Video preview thumbnail extraction set to fire at 10/01/2026 02:00:00, which is 522.1334624716667 minutes from now.
emby | Info TaskManager: Daily trigger for Rotate log file set to fire at 10/01/2026 00:00:00, which is 402.13306065166665 minutes from now.
emby | Info TaskManager: Queueing task HardwareDetectionScheduledTask
emby | Info TaskManager: Executing Hardware Detection
emby | Info TaskManager: Daily trigger for Emby Server Backup set to fire at 10/01/2026 00:10:00, which is 412.1328347983333 minutes from now.
emby | Info App: ServerId: d21d02efaa4f4b778f0e53cb03473983
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -version' Execute: /bin/ffmpeg -hide_banner -version
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -version' Process exited with code 0
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -decoders' Execute: /bin/ffmpeg -hide_banner -decoders
emby | Info App: Starting entry point Emby.Server.Implementations.Networking.RemoteAddressEntryPoint
emby | Info App: Loading data from /config/data/wan.dat
emby | Info App: Entry point completed: Emby.Server.Implementations.Networking.RemoteAddressEntryPoint. Duration: 0.003612 seconds
emby | Info App: Starting entry point Emby.Server.Connect.ConnectEntryPoint
emby | Info App: Loading data from /config/data/connect.txt
emby | Info App: Entry point completed: Emby.Server.Connect.ConnectEntryPoint. Duration: 0.0019533 seconds
emby | Info App: Starting entry point Emby.Dlna.Main.DlnaEntryPoint
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -decoders' Process exited with code 0
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -encoders' Execute: /bin/ffmpeg -hide_banner -encoders
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -encoders' Process exited with code 0
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -hwaccels' Execute: /bin/ffmpeg -hide_banner -hwaccels
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -hwaccels' Process exited with code 0
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -protocols' Execute: /bin/ffmpeg -hide_banner -protocols
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -protocols' Process exited with code 0
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -filters' Execute: /bin/ffmpeg -hide_banner -filters
emby | Info FfmpegManager: ProcessRun 'ffmpeg -hide_banner -filters' Process exited with code 0
emby | Info FfmpegManager: FfmpegValidator.Validate complete
emby | Info App: Entry point completed: Emby.Dlna.Main.DlnaEntryPoint. Duration: 0.0814284 seconds
emby | Info App: Core startup complete
emby | Info App: Starting entry point Emby.Server.Implementations.Udp.UdpServerEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Udp.UdpServerEntryPoint. Duration: 0.0012685 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Session.PartyEventNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.Session.PartyEventNotifier. Duration: 0.0011552 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Playlists.PlaylistUpgradeEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Playlists.PlaylistUpgradeEntryPoint. Duration: 0.0012941 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Library.DeviceAccessEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Library.DeviceAccessEntryPoint. Duration: 0.0008418 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.IO.LibraryMonitorStartup
emby | Info App: Entry point completed: Emby.Server.Implementations.IO.LibraryMonitorStartup. Duration: 0.0157845 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.AutomaticRestartEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.AutomaticRestartEntryPoint. Duration: 0.0004845 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.KeepServerAwake
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.KeepServerAwake. Duration: 0.0001246 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.LibraryChangedNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.LibraryChangedNotifier. Duration: 0.0006646 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.LogLibrariesEntryPoint
emby | Info App: Libraries
emby | Server Configuration: CollapseVideoFolders: False
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.LogLibrariesEntryPoint. Duration: 0.0007897 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.ServerEventNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.ServerEventNotifier. Duration: 0.001685 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.StartupWizard
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.StartupWizard. Duration: 0.0002719 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.SystemEvents
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.SystemEvents. Duration: 0.0002289 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.EntryPoints.UserDataChangeNotifier
emby | Info App: Entry point completed: Emby.Server.Implementations.EntryPoints.UserDataChangeNotifier. Duration: 0.0002808 seconds
emby | Info App: Starting entry point Emby.Server.Implementations.Channels.ChannelsEntryPoint
emby | Info App: Entry point completed: Emby.Server.Implementations.Channels.ChannelsEntryPoint. Duration: 0.0019908 seconds
emby | Info App: Starting entry point Emby.LiveTV.EntryPoint
emby | Info LiveTV: Loading live tv data from /config/data/livetv/timers
emby | Info App: Entry point completed: Emby.LiveTV.EntryPoint. Duration: 0.0019397 seconds
emby | Info App: Starting entry point Emby.LiveTV.RecordingNotifier
emby | Info App: Entry point completed: Emby.LiveTV.RecordingNotifier. Duration: 0.0010347 seconds
emby | Info App: Starting entry point Emby.Server.MediaEncoding.Api.EncodingManagerEntryPoint
emby | Info App: Entry point completed: Emby.Server.MediaEncoding.Api.EncodingManagerEntryPoint. Duration: 0.0008181 seconds
emby | Info App: Starting entry point Emby.Notifications.NotificationManagerEntryPoint
emby | Info Notifications: Registering event nofitier Activity Log
emby | Info Notifications: Registering event nofitier Emby Server User Notifications
emby | Info Notifications: Registering event factory CoreNotificationTypeFactory
emby | Info Notifications: Registering event factory BackupNotificationTypeFactory
emby | Info App: Entry point completed: Emby.Notifications.NotificationManagerEntryPoint. Duration: 0.0207902 seconds
emby | Info App: Starting entry point Emby.Server.Sync.SyncNotificationEntryPoint
emby | Info App: Entry point completed: Emby.Server.Sync.SyncNotificationEntryPoint. Duration: 0.0010305 seconds
emby | Info App: Starting entry point EmbyServer.Windows.LoopUtilEntryPoint
emby | Info App: Entry point completed: EmbyServer.Windows.LoopUtilEntryPoint. Duration: 8.16E-05 seconds
emby | Info App: Starting entry point MBBackup.ServerEntryPoint
emby | Info App: Entry point completed: MBBackup.ServerEntryPoint. Duration: 8.44E-05 seconds
emby | Info App: Starting entry point Emby.Security.PluginSecurityManager
emby | Info App: Entry point completed: Emby.Security.PluginSecurityManager. Duration: 3.85E-05 seconds
emby | Info App: Starting entry point Emby.Server.CinemaMode.IntrosEntryPoint
emby | Info App: Entry point completed: Emby.Server.CinemaMode.IntrosEntryPoint. Duration: 0.0001348 seconds
emby | Info App: Starting entry point Emby.PortMapper.ExternalPortForwarding
emby | Info App: Entry point completed: Emby.PortMapper.ExternalPortForwarding. Duration: 0.0012258 seconds
emby | Info App: Starting entry point NfoMetadata.EntryPoint
emby | Info App: Entry point completed: NfoMetadata.EntryPoint. Duration: 0.0001927 seconds
emby | Info App: Starting entry point Tvdb.EntryPoint
emby | Info App: Entry point completed: Tvdb.EntryPoint. Duration: 4.17E-05 seconds
emby | Info App: All entry points have started
@@ -0,0 +1,8 @@
{
"emby": {
"status": "running",
"health": "healthy",
"restarts": 0,
"exit": 0
}
}
@@ -0,0 +1,53 @@
{
"harness_version": 4,
"edge": "MV-emby",
"app": "emby",
"note": "night 2026-09-23 within-a-major move: emby=emby/embyserver:4.11.0.4",
"from": {
"emby": "emby/embyserver:4.11.0.3"
},
"to": {
"emby": "emby/embyserver:4.11.0.4"
},
"verdict": "proven",
"seed_read_before": true,
"seed_read_after": true,
"healthy_after": true,
"migration_observed": "\u001b[2Kemby | Info SqliteUserRepository: Sqlite compiler options: ATOMIC_INTRINSICS=1,COMPILER=gcc-13.4.0,DEFAULT_AUTOVACUUM,DEFAULT_CACHE_SIZE=-2000,DEFAULT_FILE_FORMAT=4,DEFAULT_JOURNAL_SIZE_LIMIT=-1,DEFAULT_MMAP_SIZE=0,DEFAULT_PAGE_SIZE=4096,DEFAULT_PCACHE_INITSZ=20,DEFAULT_RECURSIVE_TRIGGERS,DEFAULT_SECTOR_SIZE=4096,DEFAULT_SYNCHRONOUS=2,DEFAULT_WAL_AUTOCHECKPOINT=1000,DEFAULT_WAL_SYNCHRONOUS=2,DEFAULT_WORKER_THREADS=0,DIRECT_OVERFLOW_READ,ENABLE_COLUMN_METADATA,ENABLE_FTS3_PARENTHESIS,ENABLE_FTS3_TOKENIZER,ENABLE_FTS5,ENABLE_MATH_FUNCTIONS,ENABLE_PERCENTILE,ENABLE_UPDATE_DELETE_LIMIT,LIKE_DOESNT_MATCH_BLOBS,MALLOC_SOFT_LIMIT=1024,MAX_ATTACHED=10,MAX_COLUMN=2000,MAX_COMPOUND_SELECT=500,MAX_DEFAULT_PAGE_SIZE=8192,MAX_EXPR_DEPTH=1000,MAX_FUNCTION_ARG=1000,MAX_LENGTH=1000000000,MAX_LIKE_PATTERN_LENGTH=50000,MAX_MMAP_SIZE=0x7fff0000,MAX_PAGE_COUNT=0xfffffffe,MAX_PAGE_SIZE=65536,MAX_SCHEMA_RETRY=25,MAX_SQL_LENGTH=1000000000,MAX_TRIGGER_DEPTH=1000,MAX_VARIABLE_NUMBER=250000,MAX_VDBE_OP=250000000,MAX_WORKER_THREADS=8,MUTEX_PTHREADS,OMIT_LOOKASIDE,OMIT_SHARED_CACHE,SYSTEM_MALLOC,TEMP_STORE=1,THREADSAFE=1",
"abort": "starts-and-serves",
"abort_detail": null,
"engine_state_after": null,
"memory": {
"soak_s": 604.9,
"requested_s": 600,
"requests": 11992,
"codes": {
"302": 11992
},
"first_kill": null,
"containers": {
"emby": {
"limit": 2147483648,
"peak": 157536256,
"peak_pct": 0.073,
"anon_peak_sampled": 101310464,
"anon_peak_pct": 0.047,
"oom_kills": 0,
"restarts": 0,
"oomkilled_flag": false,
"measured": true
}
},
"unmeasured": [],
"load": "reached"
},
"marks": [],
"duration_s": 30.8,
"measured_at": "2026-09-30T15:28:57Z",
"evidence": "evidence/MV-emby",
"scratch_cleared": [
"/srv/felhom-gate/hdd/userdata/media"
],
"files_changed": [],
"total_s": 738.0
}

Some files were not shown because too many files have changed in this diff Show More