Log the NFS/rename() image-upload defect + fix as a general gotcha (applies to any future app with local uploads on NFS bind mounts), update CT 114 status and active projects

This commit is contained in:
Spendlik 2026-08-11 11:15:42 +00:00
parent 886c9b010b
commit c4b5a06927

View File

@ -36,7 +36,7 @@
| 110 | windows11 (VM) | 192.168.1.227 | — | RTX 4060 passthrough, Rhino 7 + Sunshine/Moonlight |
| 111 | paperless | 192.168.1.111 | paperless.spendlik.sk | Document management (6-lang OCR, media+data on NAS) |
| 112 | mcp-server | 192.168.1.100 | mcp.spendlik.sk | MCP bridge — Proxmox + Gitea tools for Claude |
| 114 | koillection | 192.168.1.114 | collections.spendlik.sk | Collection manager — live over HTTPS as of 2026-08-11 (Docker/nginx/SSL/DNS done); **Authelia decision + first admin login still pending**, see `114_koillection_deployment.md` |
| 114 | koillection | 192.168.1.114 | collections.spendlik.sk | Collection manager — live over HTTPS, admin login done, image uploads working (fix applied 2026-08-11, see gotchas). **Remaining: create the 5 real collections** (currently only a deleted test collection), see `114_koillection_deployment.md` |
| 115 | vaultwarden | 192.168.1.115 | vault.spendlik.sk | Password manager (Vaultwarden, Docker, Bitwarden-compatible) |
> ⚠️ CT 117 (Radicale) has a deployment guide written but is **NOT yet deployed** — do not treat as live infrastructure. It will be added to this table once physically provisioned.
@ -93,7 +93,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| `secrets-index.md` | Map of service credentials and WHERE they are stored (no actual secrets) |
| `PROJECT_INSTRUCTIONS.md` | Canonical behavioural/methodology reference — decision defaults, checklists, gotchas, **Pre-Flight Verification protocol (added 2026-08-11)** |
| `113_stirling_pdf_deployment.md` | CT 113 — Stirling PDF Docker deploy, nginx, SSL, n8n API integration |
| `114_koillection_deployment.md` | CT 114 — Koillection Docker deploy, NAS uploads mount, collection setup — **IN PROGRESS: live over HTTPS, Authelia + first login pending** |
| `114_koillection_deployment.md` | CT 114 — Koillection Docker deploy, NAS uploads mount, collection setup — live over HTTPS, image-upload defect found + fixed (NFS/rename() issue), **remaining: create the 5 real collections (Phase 11)** |
| `115_vaultwarden_deployment.md` | CT 115 — Vaultwarden Docker deploy, nginx, SSL |
| `117_radicale_deployment.md` | CT 117 — Radicale CalDAV/CardDAV deploy, nginx, SSL, Thunderbird/DAVx⁵ clients — **guide only, not yet deployed** |
@ -122,6 +122,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| **LXC template versions** | Verify exact template filename in `obsidian-vault/05 Resources/Proxmox LXC Templates.md` (or live `pveam list local`) before every `pct create` — versions bump periodically and guides can reference stale strings. Once a container is created, template version is irrelevant — `apt upgrade` keeps it current, no need to recreate existing containers on a newer template. |
| **nginx vhosts belong on CT 101 only** | Never install or configure nginx on an app's own container — all reverse-proxy work happens on CT 101. Check the shell prompt if unsure which container you're in. |
| **nginx vhost filenames** | Named by full domain (e.g. `collections.spendlik.sk`), not by short service name — verify with `ls /etc/nginx/sites-available/` on CT 101 before writing a new one. |
| **NFS bind mounts + PHP `rename()` (Koillection, and any future app with local file uploads)** | If an app's temp-upload dir is on local/overlay storage but its final destination is an NFS bind mount (e.g. `/uploads`), PHP's `rename()`-based file move fails with a generic "Invalid argument" — two separate mounts of the *same* NFS export do **not** count as one filesystem for `rename()`, even if `stat` reports matching device IDs. Setting `TMPDIR`/`upload_tmp_dir` in env or php.ini does **not** help if the app hardcodes `/tmp`. Fix: replace `/tmp` with a **symlink** into a folder already inside the NFS mount (`ln -s /uploads/.phptmp /tmp`), wrapped in the container's `entrypoint:` so it's reapplied on every start. Full writeup: `114_koillection_deployment.md` → "Known Issue" section. |
| **OpenRGB** | Uninstalled — SMBus interaction with ADATA XPG GAMMIX D35 poses hardware risk. Do not reinstall. |
| **Hairpin NAT** | Slovak Telekom router blocks hairpin — test external domains from mobile data, not LAN |
| **WebSupport API auth** | HMAC-SHA1 signed requests; `X-Date` header in `YYYYMMDDTHHmmSSZ` format; service ID is numeric `15056760` |
@ -131,7 +132,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| **Stirling PDF nginx** | Set `client_max_body_size 100M` — large PDFs will be rejected without it |
| **Stirling PDF + Authelia** | Add `/api/*` bypass rule before catch-all 2FA rule — required for n8n API access |
| **Koillection HTTPS** | Set `HTTPS_ENABLED=1` in `.env` and restart the container after SSL is in place — otherwise redirect loops |
| **Koillection upgrades** | Always back up PostgreSQL DB before upgrading — data migrations can have edge cases |
| **Koillection upgrades** | Always back up PostgreSQL DB before upgrading — data migrations can have edge cases. Also re-test image upload after any image upgrade — the `/tmp` symlink workaround may become unnecessary (or need adjusting) if upstream ever fixes the hardcoded path. |
| **Radicale + Authelia** | CalDAV clients use Basic Auth on every request, not browser SSO — bypass Authelia for `cal.spendlik.sk`, rely on Radicale htpasswd + HTTPS instead |
| **pveproxy crash** | `Can't call method "process" on an undefined value at pveproxy.pm line 304` — seen 2026-07-28, likely NFS-cascade freeze (host + SSH fully unresponsive). Fix: physical power cycle. Confirmed **all CTs (100115) + VM 110 now set to "Start at boot"** as of 2026-07-28, so recovery should be automatic next time. |
| **NVIDIA driver on host shows as unavailable** | `nvidia-smi` failing on the Proxmox host with "couldn't communicate with the NVIDIA driver" is **expected**, not a fault, whenever VM 110 is running with GPU passthrough active — the GPU is owned by `vfio-pci` for the VM, not the host. Only investigate if VM 110 is stopped and the host still can't see the GPU. |
@ -142,7 +143,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| Project | Next Action | Reference |
|---|---|---|
| Koillection | Live over HTTPS (`https://collections.spendlik.sk`) — decide Authelia vs. bypass (Phase 9), then first admin login + collection setup (Phase 1011) | CT 114 |
| Koillection | Fully functional (login, uploads confirmed working) — create the 5 real collections (Hot Wheels, LEGO, Batmobiles, Comics, Paper Models); currently only a deleted test collection exists | CT 114 |
| kocka-novinky.sk automation | Build n8n POC: Brickset → Claude API → WordPress lego-set + post | CT 100 |
| Paperless-ngx | ~730 docs processing; next: Gemini post-processing setup | CT 111 |
| Gemini post-processing | Get Gemini API key → install Python package in CT 111 | CT 111 |
@ -162,6 +163,7 @@ Script location: `/usr/local/bin/ddns-update.sh` in CT 108. Full credentials map
| Item | Resolution |
|---|---|
| Accidental `apt upgrade -y` on Proxmox host (2026-08-11) | Ran against host instead of a container; pulled in `6.14.11-9-pve` + `7.0.x` kernel packages. Boot pin held throughout, no actual impact on running kernel or NVIDIA passthrough. Sealed with `proxmox-boot-tool kernel pin 6.14.11-5-pve` (reaffirmed) + `apt-mark hold` on all 5 non-pinned kernel packages. Verified via `apt-mark showhold`. |
| Koillection image uploads failing with "critical error" (2026-08-11) | Root cause: hardcoded `/tmp` path in Koillection's upload handler, colliding with NFS-mounted `/uploads` (different filesystem — `rename()` can't cross it). Fixed via `entrypoint:` override that symlinks `/tmp` into a folder already inside the NFS mount, applied fresh on every container start. Verified with a full create-upload-delete round trip. Full writeup in `114_koillection_deployment.md`. |
---