Files
felhom.eu/documentation/audits/immich-first-start-2026-09-30/tools/probe.py
T
admin 2866f6a318
gates / gates (push) Successful in 27s
immich's first start: cause measured, fixed in the catalog (R-732 closed); ISO clean-tree gate (R-730 closed)
- R-732: 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 FIXED 512MB, not host-RAM sizing). 512M fits
  only with swap (bench swap 0: 61-104 kills; 9202 swap 512 MiB: survived by swapping). Controls: swap
  alone, limit alone flip it; shared_buffers 128MB alone does not. Catalog 56c4888: v3.2.4 + 768M,
  proven with swap off on both venues. audits/immich-first-start-2026-09-30/A-cause.md.
- R-730: scripts/iso/build-felhom-iso.sh refuses an uncommitted/untracked/unpushed tree (no bypass),
  records repo-commit from the gate and iso-v<version>; test iso/test/clean-tree.sh, red-proof run
  (status check removed -> 2 of 4 cases fail -> restored).
- R-731 narrowed (gitea 28.0.0 GA; mariadb 13.0 a short-term Rolling line). R-676 note.
- New rows R-733 (bench has no swap, boxes 512 MiB), R-734 (immich .immich markers -> files_may_change).
- STATUS: the golden line corrected (no bake is due; 0.283.1 is the newest release). Register 364 -> 366.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-09-30 16:18:17 +02:00

18 lines
1.1 KiB
Python

#!/usr/bin/env python3
"""probe.py up|down <app> — deploy a catalog template at its CURRENT pins on the bench and leave it running (fixture discovery)."""
import sys, json, importlib.util
sys.argv0 = sys.argv[:]
spec = importlib.util.spec_from_file_location("ut", "/opt/upg/upgrade-test.py"); ut = importlib.util.module_from_spec(spec)
sys.argv = ["x"]; spec.loader.exec_module(ut)
act, app = sys.argv0[1], sys.argv0[2]
wd = ut.ROOT / "work" / f"probe-{app}"; proj = f"probe{app.replace('-','')}"
if act == "down":
print(ut.compose(wd, proj, "down", "-v", "--remove-orphans").returncode); sys.exit()
felhom = (ut.TEMPLATES / app / ".felhom.yml").read_text(); ct = (ut.TEMPLATES / app / "docker-compose.yml").read_text()
env = ut.cvp.build_env(app, felhom, ct)
json.dump(env, open(f"/opt/upg/probe-{app}.env.json", "w"))
ut.render(app, ut.template_images(app, ut.TEMPLATES), wd, env)
r = ut.compose(wd, proj, "up", "-d"); print("up rc", r.returncode, r.stderr[-400:])
ok, secs, st = ut.settle(proj, wd); print("settled", ok, secs, json.dumps(st))
for n in st: print(n, ut.container_ip(n))